无法以编程方式显示内置的合并工具来解决合并冲突

时间:2014-12-10 15:46:48

标签: c# tfs merge tfs-sdk

我使用单元测试项目 VS 2012 以及使用 TeamFoundationClient 11.0 TFS 2008的控制台应用程序项目 VS 2012

我使用 MergeContent(冲突,真实) 但未显示UI(用于合并的对话框模式)。

我看过这个参考:

无法以编程方式显示内置的合并工具来解决合并冲突 https://connect.microsoft.com/VisualStudio/feedback/details/783320/cannot-programatically-display-built-in-merge-tool-to-resolve-a-merge-conflict

带有useExternalMergeTool = true的Workspace.MergeContent()无法使用VS 2012打开内置的VS合并工具

http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.workspace.mergecontent(v=vs.110).aspx

  

在未配置任何用户工具的情况下将VS 2010与TFS 2010配合使用   当我们调用Workspace.MergeContent()时执行合并操作   使用useExternalMergeTool = true,使用了内置的VS合并工具。

     

在未配置任何用户工具的情况下将VS 2012与TFS 2012配合使用   当我们调用Workspace.MergeContent()时执行合并操作   使用useExternalMergeTool = true函数返回fals而不   打开内置的VS合并工具。最后,与以前的版本不同,   VS 2012内置的合并工具相当不错,但现在没办法了   以编程方式打开它以解决合并冲突。这是   VS 2010的功能回归。

有关它的任何建议或合并内容的show modal对话框的任何解决方法吗?

1 个答案:

答案 0 :(得分:0)

从Visual Studio安装目录复制vsDiffMerge.exe目录中的C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE

var mergetool = new ThirdPartyToolDefinition(".*",ToolOperations.Merge,"vsDiffMerge.exe","","/m %1 %2 %3 %4");
var toolcol= ThirdPartyToolDefinitionCollection.Instance.FindTool(".*",ToolOperations.Merge);
if (toolcol == null)
   {
    ThirdPartyToolDefinitionCollection.Instance.AddTool(mergetool);
    ThirdPartyToolDefinitionCollection.Instance.PersistAllToRegistry();
   }

var controlsAssembly = Assembly.GetAssembly(typeof(ControlAddItemsExclude));
var vcResolveCoinflictsDialogType = controlsAssembly.GetType("Microsoft.TeamFoundation.VersionControl.Controls.DialogResolveConflicts");
var ci = vcResolveCoinflictsDialogType.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, new[] { typeof(Workspace), typeof(string[]), typeof(bool) }, null);
var resolveCoinflictsDialog = (Form)ci.Invoke(new object[] { workspace, null, true });
resolveCoinflictsDialog.ShowDialog(parent);

ThirdPartyToolDefinitionCollection.Instance.Remove(mergetool);
ThirdPartyToolDefinitionCollection.Instance.PersistAllToRegistry();