T4 模板:在修改模板使用的某些类时使模板运行的任意方法

  • 本文关键字:方法 任意 运行 模板 修改 T4 c# t4
  • 更新时间 :
  • 英文 :


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

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

目前我必须这样做:

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

因此,也许有一种方法可以让模板"检测"它使用的另一个来源中的更改,并表现得好像它自己被修改了一样?

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

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

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

相关内容

最新更新