次の方法で共有


T4 テキスト テンプレートから Visual Studio またはその他のホストへのアクセス

更新 : 2011 年 3 月

テキスト テンプレートでは、テンプレートを実行するホスト (Visual Studio など) によって公開されるメソッドとプロパティを使用できます。

これは、前処理されたテキスト テンプレートではなく、標準のテキスト テンプレートに当てはまります。

ホストへのアクセスの取得

template ディレクティブで hostspecific="true" を設定します。 これにより、ITextTemplatingEngineHost 型の this.Host を使用できるようになります。 この型は、ファイル名の解決やエラー ログの記録などに使用できるメンバーを持ちます。

ファイル名の解決

テキスト テンプレートに関連するファイルの完全パスを確認するには、this.Host.ResolvePath() を使用します。

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.IO" #>
<#
 // Find a path within the same project as the text template:
 string myFile = File.ReadAllText(this.Host.ResolvePath("MyFile.txt"));
#>
Content of myFile is:
<#= myFile #>

エラー メッセージの表示

この例では、テンプレートの変換時にメッセージ ログを記録します。 ホストが Visual Studio の場合は、エラー ウィンドウにメッセージ ログが追加されます。

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.CodeDom.Compiler" #>
<#
  string message = "test message";
  this.Host.LogErrors(new CompilerErrorCollection() 
    { new CompilerError(
       this.Host.TemplateFile, // Identify the source of the error.
       0, 0, "0",   // Line, column, error ID.
       message) }); // Message displayed in error window.
#>

Visual Studio API の使用

Visual Studio でテキスト テンプレートを実行する場合は、this.Host を使用して、Visual Studio によって提供されるサービスと、読み込まれたパッケージまたは拡張機能にアクセスできます。

hostspecific="true" を設定し、this.Host を IServiceProvider にキャストします。

この例では、Visual Studio API である DTE をサービスとして取得します。

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<# 
 IServiceProvider serviceProvider = (IServiceProvider)this.Host;
 DTE dte = serviceProvider.GetService(typeof(DTE)) as DTE;  
#>
Number of projects in this solution: <#=  dte.Solution.Projects.Count #>

履歴の変更

日付

履歴

理由

2011 年 3 月

トピックが作成されました。

カスタマー フィードバック