我是T4新手试图使用T4 Toolbox生成基于this answer的F#代码,但似乎类功能块不能与语句块混合使用。这是我的代码:
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="txt" #>
<#@ include file="T4Toolbox.tt" #>
<#
FSharpTemplate template = new FSharpTemplate();
template.Output.Project = @"..\Library1\Library1.fsproj";
template.Output.File = "Module2.fs";
template.Render();
#>
<#+
class FSharpTemplate: Template
{
public override string TransformText()
{
#>
module Module2
<# for (int i = 0; i < 10; i++) { #>
<#= i #>
<# } #>
<#+
return this.GenerationEnvironment.ToString();
}
}
#>
我收到了这个错误:
声明后不能出现 模板中的第一类功能。 只有样板,表达式和 之后允许其他类功能 第一类功能块。
那么......我怎样才能重写模板来实现这个目标呢?
答案 0 :(得分:11)
在第一个类功能块之后,您需要使所有后续语句块也成为类功能块。
在封面下,第一个类功能块终止幕后“生成”方法,并切换到将内容作为模板幕后类的成员插入。
如果您使用的是Visual Studio 2010,则可以随时创建预处理模板并将常规模板代码粘贴到该模板中,以查看幕后发生的情况。
答案 1 :(得分:5)
您应该在同一功能块中具有所有类功能,位于任何输出下方。
答案 2 :(得分:3)
虽然@ GarethJ的答案解释了为什么会发生这种情况,但它并没有告诉你如何修复它。您需要添加一个加号,即使用<ng-container *ngFor="let item of list">
<ng-container *ngIf="!item.hidden">
<tr>
<td>{{item.name}}</td>
<td><input type="checkbox"
[checked]="item.hidden"
(change)="item.hidden = !item.hidden" /></td>
</tr>
</ng-container>
</ng-container>
而不是<#+
<#