我正在尝试在T4模板中编写一个类。它给出了错误:
Compiling transofrmation: Type of namespace definition, or end-of-file expected
如果我有以下代码:
<#+
namespace Learn {
public class Converter
{
}
}
#>
但如果删除命名空间
,它可以正常工作<#+
public class Converter
{
}
#>
我的问题是,为什么T4无法识别namespace
?
答案 0 :(得分:2)
&lt;#+#&gt;是一个类功能块。你放在这个块中的任何内容都将写在一个类声明中。当你添加一个命名空间时,T4会生成并尝试编译这样的东西:
class MyT4TempGen {
public string run() {
inside here is code that uses a string builder to build up all your <# #> tags into one big statement
}
from here down all your <#+ #> tags are added
public class Converter {
}
}
这是无效的C#代码,命名空间不能存在于类语句中。当你在没有命名空间的情况下执行它时,你会得到这个:
{{1}}
哪个是有效的c#代码,您的类将是T4编译器创建的类的子类。
以下是msdn docs的链接,用于解释支持的标记。请参见“类功能控制块”部分。请记住,无论你在tt或t4文件中输入什么,都会被解析并转换成.net代码,所以你必须遵循所有正常的语法规则。