2017-04-03 40 views
11

调试T4模板在VS2017社区,我不能调试T4模板,它在2015年不能在VS2017

工作我有一个非常基本的模板,像这样......

<#@ template debug="true" hostspecific="false" language="C#" #> 
<#@ output extension=".txt" #> 
<# 
var a = "Hello"; 
var b = "World"; 
#> 
<#=($"{a} {b}!")#> 

Run Custom ToolTransform All T4 Templates两个选项都可以工作,而文本文件包含预期输出

Hello World!

如果我把断点的地方,并使用Debug T4 Template从.TT的上下文菜单,它抛出这个错误

无法启动改造运行创建过程。

但是,它在VS 2015中正常工作,我可以在那里调试。

我可能会错过什么?如何在VS 2017中调试T4模板?请注意,我没有任何工具/扩展安装在VS2015调试T4

+2

已在即将发布的版本中修复。见Ariel Vang的评论。 https://developercommunity.visualstudio.com/content/problem/46721/unable-to-debug-t4-text-template-in-vs2017.html –

回答

5

我有同样的问题,我不知道为什么它不这样工作,但我有一个解决办法。

设置调试为true,并添加诊断命名空间

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

在你的T4模板写

Debugger.Launch(); 

然后运行你的模板(它只是将其保存最简单的方法),它会问如果您想在Visual Studio的新实例中进行调试。

+1

谢谢@Rezonir,调试器显示出来,如果我按照你所提到的,但它不方便,并且与我的真实项目无法很好地协作,我需要将条件断点和几个变量放在一起。 – Raheel

+1

要提及“Debugger.Launch();”需要在你的T4模板之一“<#Debugger.Launch();#>”节点中。 –

+1

它在这里工作的视频。 https://youtu.be/U2NzQqghu_A 偶尔会说'您选择的调试器无法启动。你想选择另一个吗?“说好,你会被提示再次使用Visual Studio,它应该在第二次尝试。我发现在重新启动Visual Studio之前它不会再执行此操作。 –

3

最简单的解决方案是将这两行添加到T4模板的顶部。

<#@ template debug="true" hostspecific="false" language="C#" #> 
<# System.Diagnostics.Debugger.Launch(); #> 

然后通过保存文件运行模板,Visual Studio会提示您在新实例中调试。

如果您在模板中使用主机,并且出现错误The name 'Host' does not exist in the current context,则设置`hostspecific =“true”'。