我最近开始了一次远征,对一个相当复杂的 T4 类进行单元测试。我已经取得了重大突破,但恐怕观察到的行为可能只是巧合(即,可能会在 Visual Studio 的 future 版本中出现问题)
我基本上有这样的东西:
主模板.tt:
<#@ include file="generator.tt.cs" #>
然后在generator.tt.cs中我有
//<#+
class code
{
....
}
//#>
观察到的行为是,我既可以使用 T4 模板中声明的类等,又可以正常编译代码文件。但是,在 <#+
之前添加注释前缀和#>
标记所有定义的行为?我将来会冒这种破坏的风险吗?
此外,我已经在 MonoDevelop 和 Visual Studio 2012 上对此进行了测试。它似乎对两者都适用。不过,Visual Studio 2008 兼容性对我来说并不重要。
最佳答案
我不能说我们将来不会“永远”破坏事物,但我发现很难想象我们会做什么来破坏这个。功能 block 内的评论将始终受到尊重,并且在需要尊重它之前的评论才能允许生成评论。我认为你很安全。
我认为你必须在generator.tt.cs文件中使用完全限定的名称,因为没有地方可以放置using语句或命名空间。
这与通过一些空 stub 模板预编译用于测试的帮助程序库然后测试预编译版本相比如何?
关于.net - 这个 hack 是 T4 的定义行为吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13171344/