如何在 TT 文件中使用全局变量?
如果我在标头中声明一个变量,并且在函数中引用它,则会出现编译错误。
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#
int ValueForThisFile = 35;
SomeFunction();
#>
<#+
void SomeFunction() {
#>
public void GeneratedCode() {
int value = <#=ValueForThisFile#>;
}
<#+
}
#>
我知道我可以将它作为参数传递,但有数百个调用,如果我可以避免这种情况,语法上会更严格。如果这是一个文件,我可以对值进行硬编码,但有数十个文件具有不同的设置和生成代码的公共包含文件。
我认为这是不可能的。当 T4 解析您的模板时,它实际上是生成一个类。所有 内容都被注入到该类的单个方法中,而所有 标记都作为方法添加到该类中,允许您从单个方法 标记调用它们。因此“ValueForThisFile”变量的范围仅限于该单个方法。举个简单的例子,这个模板:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#
int ValueForThisFile = 35;
SomeFunction();
#>
<#+
void SomeFunction() {
return ValueForThisFile;
}
#>
会生成一个这样的类:
class T4Gen {
private void MainWork() {
int ValueForThisFile = 35;
this.SomeFunction();
}
private void SomeFunction{
return ValueForThisFile;
}
}
变量“ValueForThisFile”的作用域仅限于 MainWork 函数。 T4 生成的实际类要复杂得多,但正如您所见,无法在这样的代码中拥有全局变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)