Как создать метод, который инкапсулирует текстовый раздел шаблона T4? - PullRequest
5 голосов
/ 09 января 2011

. Вместо этоговыше не правильно.Как это сделать?

Ответы [ 2 ]

7 голосов
/ 24 мая 2014

Это альтернативное решение , а не с использованием функциональных блоков класса <#+ ... #>. Использование лямбда-выражения внутри блоков обычных операторов <# ... #> позволяет определить локальную функцию следующим образом:

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

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

<# output(); #>

Этот шаблон производит вывод ниже:

loooooooong text message
6 голосов
/ 20 января 2011

На самом деле вы очень близки с тем, что у вас есть. Я считаю, что полезно помнить, что шаблон по сути является классом C # / VB, поэтому, когда вы используете блок <# + #>, вы просто добавляете член в класс.

Как только вы начали использовать нотацию <# + #>, вы должны продолжать использовать ее, так как вы все еще добавляете материал в класс на уровне члена, не добавляя метод TransformText (), который обычно < # #> теги делают.

Правильный синтаксис будет

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

<#+ }
#>
...