2010-01-22 2 views
0

Я разрабатываю инструмент TFS, чтобы помочь разработчикам в нашей компании.Использование VersionControlExt.Explorer за пределами Visual Studio

Этот инструмент должен иметь возможность «просматривать» сервер TFS, как в проводнике исходного кода. Я считаю, что с помощью VersionControlExt.Explorer.SelectedItems появится пользовательский интерфейс, который позволит пользователю просматривать сервер TFS (пожалуйста, поправьте меня, если я ошибаюсь).

Однако VersionControlExt доступен только при разработке внутри Visual Studio (aka Plugin). К сожалению, я разрабатываю приложение Windows, которое выиграло; t запускается внутри VS.

Итак, вопрос в том, могу ли я использовать VersionControlExt вне Visual Studio? Если да, то как?

Here's попытка на использовании Changset Подробности Dialog вне Visual Studio

string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
Assembly vcControls = Assembly.LoadFile(path + @"\Microsoft.TeamFoundation.VersionControl.Controls.dll"); 
Assembly vcClient = Assembly.LoadFile(path + @"\Microsoft.TeamFoundation.VersionControl.Client.dll"); 

Type dialogChangesetDetailsType = vcControls.GetType("Microsoft.TeamFoundation.VersionControl.Controls.DialogChangesetDetails",true); 
Type[] ctorTypes = new Type[3] {vcClient.GetType("Microsoft.TeamFoundation.VersionControl.Client.VersionControlSever"), 

vcClient.GetType("Microsoft.TeamFoundation.VersionControl.Client.Changeset"), typeof(System.Boolean)}; 

ConstructorInfo ctorInfo = dialogChangesetDetailsType.GetConstructor(ctorTypes); 
Object[] ctorObjects = new Object[3] {VersionControlHelper.CurrentVersionControlServer, uc.ChangeSet, true}; 
Object oDialog = ctorInfo.Invoke(ctorObjects); 
dialogChangesetDetailsType.InvokeMember("ShowDialog", BindingFlags.InvokeMethod, null, oDialog, null); 
+0

Просто любопытно, почему бы не использовать веб-версию, представленную MS, включенную в установки по умолчанию с TFS2010, а также: http://msdn.microsoft.com/en-us/teamsystem/bb980951.aspx I «Любопытно, потому что у нас есть аналогичная ситуация, какие потребности не удовлетворяли веб-версии? –

+0

Планируется также включить этот инструмент в нашу систему сборки. Обратите внимание, что наша система сборки работает с 1995 года и все еще использует пакетные файлы (а не систему сборки TFS). – Ian

ответ

0

Оказывается, что я на самом деле не нужно, что Explorer.

Я выполнил это с помощью элемента управления TreeView и VersionControlServer.GetItems().

Фрагмент кода ниже:

 treeView.Sort(); //Alphabetically ordered 

     //Get Initial List of Projects 
     try 
     { 
      ItemSet itemSet = vcs.GetItems(@"$/", RecursionType.OneLevel); 

      foreach (Item item in itemSet.Items) 
      { 
       if (item.ServerItem == @"$/") //Ignore self 
        continue; 

       TreeNode node = new TreeNode(item.ServerItem, new TreeNode[] { new TreeNode() }); 
       node.Tag = item.ServerItem; 

       if (item.DeletionId != 0) 
        node.ForeColor = Color.Red; 

       treeView.Nodes.Add(node); 
      } 
     } 

Затем каждый пользователь развернуть узлы, я получаю все детали под этим узлом.

TreeNode curNode = e.Node; 
       curNode.FirstNode.Remove(); //Remove blank dummy node 


       ItemSet items = vcs.GetItems(curNode.Tag.ToString(), VersionSpec.Latest, RecursionType.OneLevel, DeletedState.Any, ItemType.Folder); 

       foreach (Item item in items.Items) 
       { 
        if (item.ServerItem == curNode.Tag.ToString()) //Ignore self 
         continue; 

        string Name = System.IO.Path.GetFileName(item.ServerItem); 

        TreeNode node = new TreeNode(Name, new TreeNode[] { new TreeNode() }); 
        node.Tag = item.ServerItem; 

        if (item.DeletionId != 0) 
         node.ForeColor = Color.Red; 

        curNode.Nodes.Add(node); 
       } 
1
public void ShowChangeSetDetails(Form owner, Changeset changeSet) 
     { 
      string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
      Assembly vcControls = Assembly.LoadFrom(path + @"\Microsoft.TeamFoundation.VersionControl.Controls.dll"); 
      Assembly vcClient = Assembly.LoadFrom(path + @"\Microsoft.TeamFoundation.VersionControl.Client.dll"); 

      Type dialogChangesetDetailsType = 
       vcControls.GetType("Microsoft.TeamFoundation.VersionControl.Controls.DialogChangesetDetails", true); 

      MethodInfo methodInfo = 
       dialogChangesetDetailsType.GetMethod(
        "ShowChangeset", 
        BindingFlags.Static | BindingFlags.NonPublic, 
        null, 
        new Type[] { typeof(IWin32Window), changeSet.VersionControlServer.GetType(), changeSet.GetType(), typeof(bool) }, 
        null); 
      methodInfo.Invoke(null, new object[] { owner, changeSet.VersionControlServer, changeSet, true }); 
     }