如何创建封装T4模板文本部分的方法?

use*_*291 5 c# t4 visual-studio

而不是这个.tt:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".txt" #>
<#@ assembly name="System"#>

<# message = "hello world" ; #>

blah blah blah etc. very complex example with embedded expression like
<#=message#>
Run Code Online (Sandbox Code Playgroud)

我想要一个输出函数,它将返回输出等等等等.:

    <#@ template debug="false" hostspecific="true" language="C#" #>
    <#@ import namespace="System.IO" #>
    <#@ output extension=".txt" #>
    <#@ assembly name="System"#>

    <#output();#>

   <#+ output() { #>
   blah blah blah etc. very complex example with embedded expression like
    <#=message#>

   <#}
   #>
Run Code Online (Sandbox Code Playgroud)

当然上面的语法不正确.这该怎么做 ?

isa*_*s-b 8

这是使用类功能块的替代解决方案<#+ ... #>.在通常的语句块中使用lambda表达式<# ... #>允许定义本地函数,如下所示:

<#@ template language="C#" #>
<#@ output extension=".txt" #>

<# Action output = () => { #>
loooooooong text <#= "message" #>
<# }; #>

<# output(); #>
Run Code Online (Sandbox Code Playgroud)

此模板生成以下输出:

loooooooong text message
Run Code Online (Sandbox Code Playgroud)


Gar*_*thJ 6

实际上,你与你所拥有的非常接近.我发现有必要记住模板本质上是一个C#/ VB类,所以当你使用<#+#>块时,你真的只是在类中添加一个成员.

一旦你开始使用<#+#>表示法,你必须继续使用它,因为你仍然在成员级别向类添加东西,而不是添加常规<##>的TransformText()方法标签做.

正确的语法是

<#+ public void output() { #>
blah blah blah etc. very complex example with embedded expression like     <#=message#>

<#+ }
#>
Run Code Online (Sandbox Code Playgroud)