【问题标题】:Cannot programatically display built in Merge tool to resolve a merge conflict无法以编程方式显示内置的合并工具来解决合并冲突
【发布时间】:2015-02-08 21:24:58
【问题描述】:

我使用单元测试项目 VS 2012 和控制台应用程序项目 VS 2012,使用 TeamFoundationClient 11.0TFS 2008强>。

我使用 MergeContent(Conflict, true) 但未显示 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 的功能回归。

关于它的任何建议或关于合并内容的显示模式对话框的任何解决方法?

【问题讨论】:

标签: c# tfs merge tfs-sdk


【解决方案1】:

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

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-01
    • 2019-05-26
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多