繁体   English   中英

T4预处理的模板调试不起作用-Visual Studio 2010 RTM

[英]T4 Preprocessed Template Debugging Not Working - Visual Studio 2010 RTM

我正在尝试调试预处理的T4模板,但无法进入通过运行预处理的模板创建的类。 我可以创建该类的实例,但是在调试时尝试进入该实例时,会弹出一个新窗口,其中显示

没有可用的资源。 当前位置没有可用的源代码。

我的理解是预处理模板可以像普通的c#类一样进行调试,这是不正确的? 为了进入由预处理模板定义的类,您需要做些特别的事情吗?

这是一个非常简单的模板和我遇到问题的调用代码:

TestPreprocessedTemplate.tt:

<#@ template language="C#" debug="true" #>
Hello <# Write("World"); #>

测试代码:

var template = new TestPreprocessedTemplate();
string test = template.TransformText();

编辑 -根据以下建议添加了debug =“ true”语句,仍然存在相同的问题。

更新 -我也在MSDN论坛上发布了这个问题,并收到了一位MS员工的回复,该回复表明是的,我上面所述的确实应该起作用。 还有其他人遇到这个问题吗?

更新 -在MSDN论坛的一些帮助下,问题似乎出在#line指令上,该指令已添加到生成的c#类中。 注释掉它们使我能够按预期方式逐步执行代码。 有什么方法可以防止将这些指令添加到生成的类中? 使用ASP.NET页面,可以添加LinePragmas =“ false”参数,但该参数似乎对T4模板没有任何影响。 有任何想法吗?

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

oleg是我要检查的主机, http: //www.olegsych.com/2008/09/t4-tutorial-debugging-code-generation-files/

看来您缺少模板标题中的debug="true"项,这对于调试是必需的。

另外,我将快速浏览以下博客文章,其中详细介绍了T4模板调试。

更新-在MSDN论坛的一些帮助下,问题似乎出在#line指令上,该指令已添加到生成的c#类中。 注释掉它们使我能够按预期方式逐步执行代码。 有什么方法可以防止将这些指令添加到生成的类中? 使用ASP.NET页面,可以添加LinePragmas =“ false”参数,但该参数似乎对T4模板没有任何影响。 有任何想法吗?

#line指令实际上在调试预处理的 T4模板时会产生问题(调试器始终搜索* .tt文件而不是生成的* .cs文件)。 我找不到任何选择来替代#line指令的生成。 所以我正在使用下面的VisualStudio Macro摆脱它们

Sub RemoveLineDirectives()
   DTE.ActiveDocument.Selection.SelectAll()
   DTE.ActiveDocument.Selection.ReplaceText("#line", "//#line")
End Sub

我总是将宏分配给命令窗口中的一些短命令

alias rl Macros.MyMacros.Module1.RemoveLineDirectives

因此,当需要调试“ 预处理 T4模板”时,只需在生成的* .cs文件处于活动状态时在命令窗口中调用rl即可删除#line指令。 删除#line指令后,调试生成的模板类将按预期工作。

不是理想的解决方案,但它可行:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM