【问题标题】:Invoke source control compare operation in vs2012 extension在 vs2012 扩展中调用源代码控制比较操作
【发布时间】:2012-10-31 01:29:14
【问题描述】:

我正在编写一个与 TFS 2010 通信的 vs2012 扩展程序(尽管我希望它也可以与 tfs2012 一起使用)。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    使用IVsDifferenceService 从您的VSPackage 调用Visual Studio diff 工具:

    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;
    

    【讨论】:

    • 这是可行的,但我有一个问题,我使用 vs2010 扩展包生成器构建了我的扩展 - visualstudiogallery.msdn.microsoft.com/…,我无法更改为 .net 4.5 并添加 shell.interop.11,可以我以不同的方式进行比较?
    • 这是 VS 2012 的新 API。它不适用于以前的版本。
    • 我知道这行不通,我问您是否知道有其他方法可以做到这一点
    猜你喜欢
    • 2016-12-26
    • 2015-03-23
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多