4

.tt拡張機能からいくつかのファイルに対してカスタム ツールを保存/実行したいと考えています。ソリューション/プロジェクト内のすべてのファイルをループするのではなく、ファイルの相対 (または完全) パスを使用して、カスタム ツールの保存/実行を実行できるようにしたいと考えています。

ProjectItemファイル ( ) のパスを指定してオブジェクトを取得し、$(SolutionDir)/MyProject/MyFile.ttメソッドを実行できるようにする方法はありますか?

4

1 に答える 1

5

FindProjectItemタイプのメソッドを使用してEnvDTE.Solution、現在のソリューション内のファイルをその名前で検索できます。メソッドは現在のExecuteCommandUI コンテキストに依存します。そうしないと、呼び出しは失敗します。

private bool TryExecuteTextTemplate(string filename)
{
    var dte = (DTE2)this.GetService(typeof(SDTE));
    Solution solution = dte.Solution;
    if ((solution != null) && solution.IsOpen)
    {
        VSProjectItem projectItem;
        ProjectItem item = solution.FindProjectItem(filename);
        if (item != null && ((projectItem = item.Object as VSProjectItem) != null))
        {
            // TODO: track the item in the Solution Explorer

            try
            {
                projectItem.RunCustomTool();
                return true;
            }
            catch (COMException) 
            { 
            }
        }
    }

    return false;
}
于 2013-07-11T22:12:39.860 に答える