T4 TextTemplatingFilePreprocessor .tt在运行时的位置

时间:2013-03-10 00:21:23

标签: t4

我正在编写一个应用程序来处理客户端计算机上的T4文件(VS之外)。理想情况下,我想将.tt文件嵌入到dll中。

我尝试将Build Action设置为Resource,但我注意到预处理的.cs文件仍然包含对.tt文件的硬编码目录引用。

分发.tt文件并在运行时引用它的正确方法是什么?

为了确保我清楚,我希望能够将文件嵌入到dll中并作为资源进行访问,或者在运行时从相对于程序集路径的位置加载文件。

1 个答案:

答案 0 :(得分:2)

您无需自行分发.tt文件。使用.tt文件会产生两个步骤:

  1. 模板引擎将模板转换为一些可编译且可运行的代码类。
  2. 运行此代码类并生成输出代码
  3. 引擎不是Visual Studio的可再发行组件,因此,当您要分发t4模板时,需要使用预处理模板。这样,在步骤1中生成的代码类将呈现到t4模板的.cs-File中,并随程序集一起编译并附带。

    当使用t4模板编写C#代码时,可能会感到困惑,因为步骤1的代码类也是C#类(当然是在ac #project中)并且包含很多.Write()方法调用实际上构建了所​​需的输出代码。

    预处理模板包含以#line开头的行,后跟T4模板文件的本地和绝对路径。这些行用于调试目的,并允许Visual Studio在步骤1中模板引擎发现错误时在.tt文件中显示正确的行。