.net - 这个 hack 是 T4 的定义行为吗

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

我最近开始了一次远征,对一个相当复杂的 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/

相关文章:

c++ - 检测到 Visual Studio 2010 不匹配 _MSC_VER 值不匹配

c# - 事件成员使用什么 EnvDTE 接口(interface)?

.net - Roslyn API 文档

jquery - 在 Jquery ajax 调用上传递多个参数时出错?

visual-studio - LNK1112 : module machine type 'x64' conflicts with target machine type 'x86' - opencv build

c# - 在 t4 模板中检测类继承

c# - 无法加载 GAC 中找到的程序集

.net - 为什么 DataContractSerializer 绕过初始值设定项?

c# - 从 Azure 表存储中删除批处理时如何避免 404

c++ - 为什么当我从向导在 Visual Studio 2013 中创建 C++ 类时,我不需要包含来自 stdafx.h 的 header