3

Я пишу расширение vs2012, которое будет разговаривать с TFS 2010 (хотя я бы предпочел, чтобы он также мог работать с tfs2012).Вызвать операцию сравнения управления версиями в расширении vs2012

Мне нужно вызвать операции сравнения в файле из расширения.

Я хочу использовать инструмент сравнения по умолчанию, который настроен в визуальной студии в момент новшества (потому что пользователь может настроить другой инструмент сравнения).

У меня есть местоположение файла, и я хочу, чтобы иметь возможность ссылаться на следующее:

  • открыть по умолчанию сравнить.
  • открыть сравнение с последней версией
  • открыть сравнение с рабочей версией

ответ

4

Использования IVsDifferenceService для вызова Визуального инструмента Студии дифф из вашего VSPackage:

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; 
+0

это работает, но у меня есть проблема, которую я построил мое расширение с помощью VS2010 extnension пакета строителя - http://visualstudiogallery.msdn.microsoft.com/e9f40a57-3c9a-4d61-b3ec-1640c59549b3 и я не могу изменить на .net 4.5 и добавить shell.interop.11, могу ли я сравнивать по-другому? – Clueless

+0

Это новый API для VS 2012. Он не будет работать в предыдущих версиях. – KMoraz

+0

Я знаю, что это не сработает, я спросил, есть ли другой способ сделать это, что вы знаете о – Clueless