0

私は、当社の開発者を支援するためのTFSツールを開発しています。

このツールは、ソース管理エクスプローラーのようにTFSサーバーを「参照」できる必要があります。VersionControlExt.Explorer.SelectedItemsを使用すると、UIがポップアップ表示され、ユーザーがTFSサーバーを参照できるようになると思います(間違っている場合は修正してください)。

ただし、VersionControlExtにアクセスできるのは、Visual Studio(別名プラグイン)内で開発する場合のみです。残念ながら、私はVS内で実行されないWindowsアプリケーションを開発しています。

したがって、問題は、Visual Studioの外部でVersionControlExtを使用できますか?はいの場合、どのように?

VisualStudioの外部でChangsetDetailsダイアログを使用する試みを次に示します

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

2 に答える 2

0

そのエクスプローラーは本当に必要ないことがわかりました。

これは、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);
                }
于 2010-03-23T09:49:48.967 に答える