2010-01-22 6 views
0

Je suis en train de développer un outil TFS pour aider les développeurs de notre société.Utiliser VersionControlExt.Explorer en dehors de Visual Studio

Cet outil doit être capable de "parcourir" le serveur TFS comme dans l'Explorateur de contrôle de source. Je crois qu'en utilisant VersionControlExt.Explorer.SelectedItems, une interface utilisateur apparaîtra qui permettra à l'utilisateur de naviguer sur le serveur TFS (veuillez me corriger si je me trompe). Cependant, VersionControlExt est uniquement accessible lors du développement dans Visual Studio (alias Plugin). Malheureusement, je développe une application Windows qui ne fonctionne pas dans VS. Donc, la question est, Puis-je utiliser VersionControlExt en dehors de Visual Studio? Si oui, comment?

Here's une tentative sur l'utilisation de la Détails Changset Dialog en dehors de 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

curiosité, pourquoi ne pas utiliser la version Web fournie par MS, inclus dans l'installation par défaut avec TFS2010 ainsi: http://msdn.microsoft.com/en-us/teamsystem/bb980951.aspx I Suis curieux parce que nous avons une situation similaire, à quels besoins la version web ne répondait-elle pas? –

+0

Il est prévu d'incorporer cet outil dans notre système de construction. Notez que notre système de construction est à partir de l'année 1995 et qu'il utilise toujours des fichiers batch (pas TFS Build System). – Ian

Répondre

0

se trouve que je ne suis pas vraiment besoin que Explorer. J'ai accompli cela en utilisant le contrôle TreeView et VersionControlServer.GetItems().

code extrait ci-dessous:

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

Ensuite, chaque fois que l'utilisateur développez les nœuds, je reçois tous les éléments sous ce nœud.

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 }); 
     } 
Questions connexes