我使用单元测试项目 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合并工具在未配置任何用户工具的情况下将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对话框的任何解决方法吗?
答案 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();