这个hack是T4的定义行为吗?

时间:2012-11-01 05:16:08

标签: .net visual-studio t4 undefined-behavior forward-compatibility

我最近开始对一个相当复杂的T4类进行单元测试。我已经到了一个重大的突破,但我担心观察到的行为可能只是巧合(即,可能会在Visual Studio的未来版本中中断)

我基本上有这样的事情:

MainTemplate.tt:

<#@ include file="generator.tt.cs" #>

然后在generator.tt.cs中我有

//<#+
class code
{
....
}
//#>

观察到的行为是我可以使用声明的类等来自T4模板并正常编译代码文件。但是,在所有已定义的行为中,<#+#>标记前面的注释前缀是什么?我将来冒这个风险吗?

另外,我在MonoDevelop和Visual Studio 2012上都进行了测试。它似乎适用于两者。但Visual Studio 2008兼容性对我来说并不重要。

1 个答案:

答案 0 :(得分:3)

我不能说我们将来不会'永远'破坏事物,但我发现很难想象我们会做什么会破坏这一点。将始终遵循功能块内的注释,并且需要遵守注释以允许生成注释。我认为你很安全。

我认为你必须在generator.tt.cs文件中使用完全限定名,因为没有地方可以使用语句或命名空间。

如何比较您通过一些空的存根模板为测试预编译辅助库,然后测试预编译版本?