在VS 2010中调试T4模板会导致IDE崩溃

16
我正在尝试使用Oleg Sych几年前发布的说明,调试一个略有修改的ADO.NET POCO实体生成器模板。 我按建议修改了DbgJITDebugLaunchSetting键。
我收到一个对话框,指示已触发用户定义的断点。 但是,与其被呈现出使用VS 2010的新实例进行调试的选项,原始的VS 2010实例只会崩溃并自动重新启动。
是否可能使用VS 2010调试T4模板?
5个回答

15

在 Visual Studio 2010 中,您需要在调用 Debugger.Break() 前调用 Debugger.Launch()。


这解决了启动新调试器实例的问题,但现在我在调用堆栈位置上得到“无可用源代码:*13gocwvx!Microsoft.VisualStudio.TextTemplating9936422A04D1D8AC631D9CB3A394DD16.GeneratedTextTransformation.TransformText() + 0x34 bytes.*” 有什么想法吗? - Eric J.
接受是因为部分正确,但我仍然收到上述错误。 - Eric J.

7

不要使用System.Diagnostics.Debugger.Launch();或Break(),手动附加调试器。

  1. 在第二个vs2010实例中, 打开您要调试的T4模板(只需.tt文件即可)
  2. 转到“调试” ->“附加到进程”,找到原始的devenv.exe进程
  3. 在您想要开始调试的地方添加常规断点(红色球)(仍在第二个vs2010中)
  4. 转到原始的vs2010,保存.tt文件,然后...... bingo!第二个vs2010将调试您的模板。

3

以下是适用于我的最终解决方案:

注册表编辑器:

键(x86系统):HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

键(x64系统):HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework

值:DbgJITDebugLaunchSetting

数据:0x2

tt模板:

<#@ template debug="true" hostSpecific="true"  #>
<# System.Diagnostics.Debugger.Launch(); System.Diagnostics.Debugger.Break(); #>

2

1
补充andrecarlucci的解决方案,如果您保存文件,则需要在第二个Visual Studio实例中重新加载它才能调试。如果您不需要进行进一步更改但需要多次调试它,则不必每次都保存以便打断代码。您只需在原始Visual Studio实例中单击“解决方案资源管理器”工具栏上的“转换所有模板”按钮即可。

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