共用方式為


從 T4 文字範本存取 Visual Studio 或其他主機

更新:2011 年 3 月

在文字範本中,您可以使用執行範本的主應用程式 (例如 Visual Studio) 所公開的方法和屬性。

這適用於一般文字範本,不適用於前置處理過的文字範本。

取得主機的存取權

在 template 指示詞中設定 hostspecific="true"。 這可讓您使用 this.Host,它有 ITextTemplatingEngineHost 型別。 這個型別的成員可用來,例如解析檔案名稱和記錄錯誤。

解析檔案名稱

若要尋找相對於文字範本的完整檔案路徑,請使用 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 月

建立主題

客戶回函。