【发布时间】:2013-03-11 16:13:38
【问题描述】:
我正在编写一个应用程序,它将在客户端计算机(VS 之外)上处理 T4 文件。理想情况下,我想将 .tt 文件嵌入到 dll 中。
我尝试将 Build Action 设置为 Resource,但我注意到预处理的 .cs 文件仍然包含对 .tt 文件的硬编码目录引用。
分发 .tt 文件并在运行时引用它的正确方法是什么?
为了确保我清楚,我希望能够将文件嵌入到 dll 中并作为资源访问,或者在运行时从相对于程序集路径的位置加载文件。
【问题讨论】:
-
您真的需要分发 .tt 文件吗? .tt 文件被转换为在设计时(预处理)实现 .tt 行为的 c# 类。在运行时,您实例化此 c# 类,为其提供参数并运行转换。如果您将生成的 c# 文件中的 #line pragma 称为“硬编码”文件引用 - 当出现编译错误并且对运行时转换没有影响时,这些有助于在 .tt 文件中查找错误。
-
好的,所以你说我实际上不需要担心 .tt 文件,因为生成的类?我感到困惑的是 .tt 的内容不在生成的类中,这让我相信 .tt 是必需的。
-
使用 t4 模板包括两个步骤:第一个步骤是从中生成可编译和可运行的代码类,并由模板引擎完成。在第二步中,此代码类运行并生成输出文本(在您的情况下为 c# 代码,也许这就是它令人困惑的原因)。该引擎不是 Visual Studio 的可再分发部分,这就是您在分发模板时使用预处理模板的原因。预处理的模板会生成该代码类,该代码类稍后会编写您的输出代码。根据您之前的 t4 代码,此类包含大量“写入”命令。
-
如果您可以发表您的最后一条评论作为答案,我可以接受。
标签: t4