共用方式為


T4 參數指示詞

在 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> ,您可以使用工作階段字典將值傳遞給它。 例如,假設您已將檔案建立為稱為 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")