5

我制作了一个简单的设计时模板,该模板使用位于同一项目中的枚举。该模板为该枚举类型中的每个变量生成一个类定义。

我注意到无论如何更改和保存 .tt 文件都会使其再次生成 c# 代码。我希望我可以设置解决方案,以便如果我更改枚举然后保存,那么模板也可能会再次启动源。这样当我想添加新类型时,我可以添加一个变量枚举定义,也许只是按保存。

目前我必须这样做:

  1. 将变量添加到其 .cs 文件中的枚举定义。
  2. 重新编译项目。
  3. 在模板 .tt 文件上“运行自定义工具”。
  4. 然后需要再次编译以编译 t4 生成的源代码。

那么,也许有一种方法可以让模板“检测”它使用的另一个源中的变化,并表现得像它本身已经被修改过一样?

4

1 回答 1

3
  1. 首先安装T4 Toolbox。它添加了许多功能,使处理 T4 文件变得更加容易。

  2. 将 .cs 文件的自定义工具属性更改为T4ScriptFileGenerator. 这将在 .cs 文件下创建一个新的 .tt 文件。(有关更多信息,请查看 T4 工具箱的作者Oleg Sych 的这篇博文)。现在,只要您保存原始 .cs 文件,T4 Toolbox 就会运行匹配的 .tt 文件。

  3. 在这个新文件中,您可以添加读取枚举的代码。但是,您似乎正在对生成的程序集使用反射,每次进行更改时都需要重新构建项目。请改用 Visual StudioEnvDTE来阅读您的enum. 您可以在 IDE 中访问已解析 C# 文件的抽象语法树,而无需对其进行编译。

于 2012-09-24T14:44:33.120 回答