5

公式の SDK を介して TFS と統合し、さまざまな一般的なアクションを自動化およびサポートするアプリを作成しています。そのほとんどは自動化されており、TFS API は私が必要とするほとんどすべてのものを公開していますが、一部のアクションはユーザーの介入を必要とするため、ユーザーに情報を表示する必要があります。

Difference.VisualDiffItemsVisual Studio が使用するのと同じ UI を使用して、ファイルを視覚的に簡単に比較できるような方法を見つけました。また、アイテムの履歴(ブランチ、名前の変更などを含む)を表示する必要があり、独自の UI を作成する代わりに組み込みの UI を使用したいと考えています。アイテム履歴 UI は実際には非常に複雑で、MS が SDK で提供していると思っていましたが、見つけられないようです。

TFS SDK がアイテムの履歴を視覚化するために必要なメソッドを提供していないこと、または提供している場合は正しい方向に向けることができないことを誰でも確認できますか?

4

2 に答える 2

4

Jonnoの答えは非常に役に立ち、的を射ています。先に進み、リフレクションを使用してダイアログを呼び出すためのコード スニペットを作成しました (TFS 2010 SP1 で動作します)。うまくいけば、同じ質問を持つ他の誰かに役立つでしょう。前に述べたように、この方法は、将来のバージョンで変更がなければ機能することが保証されていません。

public class TfsHistoryDialogWrapper
{
    private readonly Type _dialogHistoryType;
    private readonly object _historyDialogInstance;

    public TfsHistoryDialogWrapper(VersionControlServer versionControl, string historyItem, VersionSpec itemVersion, int itemDeletionId, RecursionType recursionType, VersionSpec versionFrom, VersionSpec versionTo, string userFilter, int maxVersions, bool? slotMode)
    {
        Assembly tfsAssembly = typeof(Microsoft.TeamFoundation.VersionControl.Controls.LocalPathLinkBox).Assembly;
        _dialogHistoryType = tfsAssembly.GetType("Microsoft.TeamFoundation.VersionControl.Controls.DialogHistory");

        _historyDialogInstance = _dialogHistoryType.GetConstructor(
                                BindingFlags.NonPublic | BindingFlags.Instance,
                                null, 
                                new Type[]{typeof(VersionControlServer), typeof(string), typeof(VersionSpec), typeof(int), typeof(RecursionType), typeof(VersionSpec), typeof(VersionSpec), typeof(string), typeof(int), typeof(bool?)},
                                null).Invoke(new object[]{ versionControl, historyItem, itemVersion, itemDeletionId, recursionType, versionFrom, versionTo, userFilter, maxVersions, slotMode });
    }

    public void ShowDialog()
    {
        _dialogHistoryType.GetMethod("ShowDialog", new Type[]{}).Invoke(_historyDialogInstance, new object[]{});
    }

}
于 2012-08-27T18:40:42.340 に答える
4

TF.exe ユーティリティで ILSpy を使用すると、履歴の表示に使用されている UI コントロールがMicrosoft.TeamFoundation.VersionControl.Controls.DialogHistory. このクラスは内部であるため、リフレクションの使用に満足しない限り、このオブジェクトを自分でインスタンス化することはできません。

実際、そのクラス名を検索すると、この social.msdn ページが表示されました

あなたの質問に最も関連するかもしれない 1 つの行は、Buck Hodges から のものです。だからあなたは壊れるリスクを受け入れる」

別の方法としては、コマンド ラインを使用して直接 TF を呼び出すこともできます (TF.exe を直接参照して同じプロセスにロードするか、必要なコマンド ラインを使用して新しいプロセスを開始します)。どちらの場合でも、標準出力に配信されるエラー メッセージを処理する必要がある可能性があります。

お役に立てれば。

于 2011-12-21T05:20:46.450 に答える