在vs2012扩展中调用源代码管理比较操作

时间:2012-11-11 09:23:18

标签: visual-studio tfs visual-studio-2012 vsx visual-studio-extensions

我正在编写一个vs2012扩展程序,它将与TFS 2010进行对话(但我更愿意,如果它也适用于tfs2012)。

我需要从扩展名调用文件的比较操作。

我想使用在创新时刻在visual studio中配置的默认比较工具(因为用户可以配置不同的比较工具)。

我有文件的位置,我希望能够调用以下内容:

  • 打开默认比较。
  • 打开与最新版本的比较
  • 打开与工作区版本的比较

1 个答案:

答案 0 :(得分:4)

使用IVsDifferenceServiceVSPackage

调用Visual Studio差异工具
private void Compare(string leftFile, string rightFile)
{
    var diffService = (IVsDifferenceService)GetService(typeof(SVsDifferenceService));
    if (diffService != null)
    {
        ErrorHandler.ThrowOnFailure(
            diffService.OpenComparisonWindow(leftFile, rightFile).Show()
            );
    }
}

要测试它,您需要设置工作区并下载要比较的文件:

    // TODO: add some error handling
    var tpc = new TfsTeamProjectCollection(new Uri("http://tfs.company.com:8080/tfs"));
    var vcs = tpc.GetService<VersionControlServer>();
    var workspace = vcs.GetWorkspace(Environment.MachineName, vcs.AuthorizedUser);

    string localItem = @"C:\workspace\project\somefile.cs";

    var folder = workspace.GetWorkingFolderForLocalItem(localItem);
    var item = vcs.GetItem(folder.ServerItem, VersionSpec.Latest);
    var latestItem = string.Format("{0}~{1}", localItem, item.ChangesetId);
    item.DownloadFile(latestItem);

    Compare(localItem, latestItem);

参考文献:

using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;