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

C# 如何创建封装T4模板文本部分的方法?,c#,visual-studio,t4,C#,Visual Studio,T4,而不是这个。tt: <#@ template debug="false" hostspecific="true" language="C#" #> <#@ import namespace="System.IO" #> <#@ output extension=".txt" #> <#@ assembly name="System"#> <# message = "hello world" ; #> blah blah blah e

而不是这个。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#>

诸如此类。非常复杂的示例,带有嵌入式表达式,如
我想要一个输出函数,可以返回输出等等:

    <#@ 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#>

   <#}
   #>

诸如此类。非常复杂的示例,带有嵌入式表达式,如

当然,上面的语法是不正确的。如何做到这一点?

事实上,你已经非常接近你所拥有的了。 我发现记住模板本质上是一个C#/VB类很有帮助,所以当你使用一个块时,你实际上只是在类中添加一个成员

一旦开始使用符号,您就必须继续使用它,因为您仍然在成员级别向类添加内容,而不是像常规标记那样添加TransformText()方法

正确的语法应该是

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

<#+ }
#>

诸如此类。非常复杂的示例,带有嵌入式表达式,如

这是一种替代解决方案而不是使用类功能块
。 在常用语句块
中使用lambda表达式可以定义如下局部函数:

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

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

<# output(); #>
loooooooong text message