在T4模板中设置断点

19

我正试图在Visual Studio 2008中调试一个T4模板的执行。

我找到的所有关于在Visual Studio 2008中调试T4模板的信息都说,您可以在模板中设置断点(红点),就像在常规代码文件中一样。我已经安装了Clarius T4代码高亮插件,所以我的T4模板已经有颜色了,但我无法设置断点。当我在边距处单击时,什么也不会发生。

我尝试过使用Debugger.Break(),它会启动一个新的VS.NET实例,但无法加载我的模板代码。我得到一个对话框,显示“当前位置没有可用的源代码”。如果我在另一个实例中加载了相同的项目,或者我启动了一个新实例,这种情况就会发生。

出了什么问题?


1
哇,Skynet现在已经升级到T4模型了? - DVK
我在使用VS2008时也遇到了同样的问题,无法在.tt文件中设置断点。(我也安装了Clarius语法高亮插件,但我认为这与断点问题无关)。然而,在VS2010中,我可以在.tt文件中设置断点。虽然对你可能没有用,但这可能对某些人很有趣。 - Mark Wilkins
在VS2017和VS2019中添加这些是必要的。你会认为VS至少会抱怨它们丢失了,而不是什么都不做并报告没有错误。 - Chris Bordeman
4个回答

30

请设置以下内容:

<#@ template debug="true" hostSpecific="true" #>
<#@ import namespace="System.Diagnostics" #>

然后在您的模板中

Debugger.Launch();

Visual Studio会在一个新的VS 2010实例中启动JIT调试器。


完美工作......启动第二个VS进行调试;逐步执行模板并进入任何你装配的调试代码。很棒! - Kirk B.
只需再进行一步操作...请确保首先通过修改您的VS安装来安装即时调试器!(将其添加为单独的组件) - sw1337

18

在Visual Studio 2013中:

  1. 在.tt文件中设置断点
  2. 在解决方案资源管理器中右键点击.tt文件
  3. 选择“Debug T4 Template”
  4. 完成!

无需附加第二个Visual Studio实例。


你知道在VS 2019中这个是否仍然有效吗?我似乎没有看到右键调试选项。 - sw1337
我也没有看到那个上下文菜单选项。 - AgentFire

9

好的,我已经理解了。无论Oleg的文章怎么说,启动一个新实例都不是一个选项。(没有贬低Sych先生的意思,他的博客对于T4代码生成来说是权威的!)

  1. 启动第二个Visual Studio实例。
  2. 打开一个文件(任何文件),以便Debug菜单出现。
  3. 选择"附加到进程..."并选择另一个VS.NET实例。
  4. 在附加的VS.NET实例中保存您的模板(或右键单击并选择运行自定义工具)。

完成。


您还可以从“工具”菜单中附加到进程。 - Jim Counts
这对我来说似乎部分有效。在VS的调试实例中,我仍然看到“没有可用的源代码”。我该如何获取源代码? - Tri Q Tran

6

请确保在模板指令中开启调试选项:

<#@ template language="C#" debug="true" #>

这将使T4保存在Visual Studio中进行调试所需的源代码和符号文件。


这个人自己!谢谢 - 显然在VS2008中,红点断点根本不起作用,但附加工作得很好。 - Dave Swersky

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