如何显示 .Net T4 生成的代码(非输出)?

12

我们有一组 T4 模板,刚刚迁移到了 VS 2010,它们能够编译,但功能却不再与之前相同。

为了知道 内部的运行过程,很有必要查看 T4 生成的临时 cs 文件,以便产生实际的 T4 转换。

3个回答

7

由于您现在正在使用Visual Studio 2010,因此您还可以将模板上的自定义工具从TextTemplatingFileGenerator暂时更改为TextTemplatingFilePreprocessor。

这将直接将底层代码输出到您的项目中,而不是常规模板输出。


+1 +正确:这绝对是最方便的。它会在原先 .config 文件所在的位置生成 .cs 文件。太棒了!非常感谢。 - iCollect.it Ltd
提醒每一个使用源代码控制的人,请注意...更改T4工具会导致之前的输出文件被标记为删除。 - iCollect.it Ltd
使用此方法将 EF.Utility.CS.ttinclude 编译成包含类的程序集。+1 - Lukazoid

5
如果您设置了
<#@ template  debug="true"#>

那么生成的代码将保存在您的临时目录中。在我的Windows 7系统上,这是 C:\Users\John Saunders\AppData\Local\Temp


我所在的客户端在所有机器上运行Windows Server 2003。有没有想法文件可能放在哪里或者它们的名称,以便我可以找到它们? - iCollect.it Ltd
1
它们有随机的名称。也许可以查看C:\Temp或%TEMP%环境变量的值。 - John Saunders
%TEMP% 是正确的位置。你的解决方案非常好,现在我能够看到它正在生成什么。非常感谢。 - iCollect.it Ltd

0

我不知道如何完全按照您的要求进行操作,但我知道如何在Visual Studio中逐步执行t4代码。您需要启动Visual Studio的第二个实例,并使用Debug->Attach to process...将其附加到第一个实例上(将其附加到自身,很奇怪,我知道)。然后,您可以在第二个实例中在T4文件中设置断点,它会停止并让您逐步执行并查看正在发生的情况。

编辑:

您需要在Visual Studio中执行t4转换,而不是命令行工具才能使其正常工作。将您的.tt文件放入项目中,并在其属性中设置“Custom Tool”为“TextTemplatingFileGenerator”。每次告诉文件保存或右键单击文件并选择“运行自定义工具”时,它都会生成文件。有关更多信息,请参见this MSDN article

我还建议使用tangible T4 editor,免费版本为大约90%的使用情况添加了代码高亮和智能感知(仅为.NET框架中Core.dll中的函数添加)。付费版本将为所有附加程序集添加智能感知。

编辑2:如果你真的想要它使用的临时cs文件,你可以在调试器中查看从临时文件夹加载的cs文件(我不记得确切的位置了)。


我删除了关于命令行选项的内容,因为这会引导误解(我们正在使用 Dev Studio)。但是,来自第二个 Dev Studio 副本的断点并不起作用。在附加到 VS-2010-copy-1 之后,在 VS-2010-copy-2 的任何 tt 文件上设置断点都会显示“目前无法触发断点。该文档尚未加载符号。”你能提供更多信息吗? - iCollect.it Ltd
我之前尝试过使用实体T4编辑器,但由于与其他插件冲突,不得不卸载它。基本文本搜索选项也不再可用。 - iCollect.it Ltd
@HiTech Magic,我会检查我的设置,但可能需要几个小时才有时间。今晚再来看看。 - Scott Chamberlain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接