T4模板:名称空间错误

时间:2016-12-20 22:43:41

标签: t4

我正在尝试在T4模板中编写一个类。它给出了错误:

Compiling transofrmation: Type of namespace definition, or end-of-file expected

如果我有以下代码:

<#+
namespace Learn {
    public class Converter
    {

    }
}
#>

但如果删除命名空间

,它可以正常工作
<#+
    public class Converter
    {

    }
#>

我的问题是,为什么T4无法识别namespace

1 个答案:

答案 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代码,所以你必须遵循所有正常的语法规则。