共用方式為


T4 參數指示詞

更新:2011 年 3 月

在 Visual Studio 文字範本中,parameter 指示詞會在範本程式碼中宣告從外部內容傳入之值初始化的屬性。 如果您撰寫叫用文字轉換的程式碼,就可以設定這些值。

使用參數指示詞

<#@ parameter type="Full.TypeName" name="ParameterName" #>

parameter 指示詞會在範本程式碼中宣告從外部內容傳入之值初始化的屬性。 如果您撰寫叫用文字轉換的程式碼,就可以設定這些值。 這些值可以透過 Session 字典或 CallContext 加以傳遞。

您可以宣告任何可遠端處理之型別的參數。 也就是說,型別必須使用 SerializableAttribute 宣告或型別必須衍生自 MarshalByRefObject。 這樣參數值就能被傳入處理範本的 AppDomain。

例如,您可以撰寫具有下列內容的文字範本:

<#@ template language="C#" #>

<#@ parameter type="System.Int32" name="TimesToRepeat" #>

<# for (int i = 0; i < TimesToRepeat; i++) { #>
Line <#= i #>
<# } #>

將參數值傳遞給範本

如果撰寫功能表命令或事件處理常式這類 Visual Studio 擴充功能,可以使用文字範本化服務來處理範本:

// Get a service provider – how you do this depends on the context:
IServiceProvider serviceProvider = dte; // or dslDiagram.Store, for example 
// Get the text template service:
ITextTemplating t4 = serviceProvider.GetService(typeof(STextTemplating)) as ITextTemplating;
ITextTemplatingSessionHost host = t4 as ITextTemplatingSessionHost;
// Create a Session in which to pass parameters:
host.Session = host.CreateSession();
// Add parameter values to the Session:
session["TimesToRepeat"] = 5;
// Process a text template:
string result = t4.ProcessTemplate("MyTemplateFile.t4",
  System.IO.File.ReadAllText("MyTemplateFile.t4"));

透過呼叫內容傳遞值

您也可以透過 CallContext 將值當做邏輯資料傳遞。

下列範例會使用兩個方法傳遞值:

ITextTemplating t4 = this.Store.GetService(typeof(STextTemplating)) as ITextTemplating;
ITextTemplatingSessionHost host = t4 as ITextTemplatingSessionHost;
host.Session = host.CreateSession();
// Pass a value in Session:
host.Session["p1"] = 32;
// Pass another value in CallContext:
System.Runtime.Remoting.Messaging.CallContext.LogicalSetData("p2", "test");

// Process a small template inline:
string result = t4.ProcessTemplate("", 
   "<#@parameter type=\"System.Int32\" name=\"p1\"#>"
 + "<#@parameter type=\"System.String\" name=\"p2\"#>"
 + "Test <#=p1#> <#=p2#>");

// Result value is:
//     Test 32 test

將值傳遞給執行階段 (前置處理過的) 文字範本

通常不需要搭配執行階段 (前置處理過的) 文字範本使用 <#@parameter#> 指示詞。 反之,只要為產生的程式碼定義額外的建構函式或可設定的屬性,透過這兩種方式即可傳遞參數值。 如需詳細資訊,請參閱使用前置處理過的 T4 文字範本在執行階段產生文字

但是,如果要在執行階段範本中使用 <#@parameter>,可以使用 Session 字典將值傳遞給該範本。 例如,假設您建立一個檔案做為前置處理過的範本,叫做 PreTextTemplate1。 您可以使用下列程式碼,在程式中叫用這個範本。

PreTextTemplate1 t = new PreTextTemplate1();
t.Session = new Microsoft.VisualStudio.TextTemplating.TextTemplatingSession();
t.Session["TimesToRepeat"] = 5;
// Add other parameter values to t.Session here.
t.Initialize(); // Must call this to transfer values.
string resultText = t.TransformText();

從 TextTemplate.exe 取得引數

重要事項重要事項

parameter 指示詞並不會擷取 TextTransform.exe 公用程式之 –a 參數中設定的值。 若要取得那些值,請在 template 指示詞中設定hostSpecific="true",並使用 this.Host.ResolveParameterValue("","","argName")。

變更記錄

日期

記錄

原因

2011 年 3 月

從父主題中分割。

資訊加強。