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

Posted

技术标签:

【中文标题】T4 预处理模板调试不起作用 - Visual Studio 2010 RTM【英文标题】:T4 Preprocessed Template Debugging Not Working - Visual Studio 2010 RTM 【发布时间】:2011-03-31 05:01:25 【问题描述】:

我正在尝试调试预处理的 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 论坛的帮助下,看起来问题出在添加到生成的 c# 类的 #line 指令上。将它们注释掉可以让我按预期逐步执行代码。 有什么方法可以防止这些指令被添加到生成的类中? 使用 ASP.NET 页面,您可以添加 LinePragmas="false" 参数,但这似乎对T4 模板。有什么想法吗?

【问题讨论】:

听起来您正在使用有形的 T4 编辑器,它显示了这个问题。如果禁用此编辑器,您会发现调试预处理模板会将您带到 tt 文件本身的正确位置。如果你真的想调试生成的 C#/VB 文件,那么 Paiden 删除下面描述的#line 指令的技术是一个很好的技术。 查看相关问题***.com/q/2945450/141172 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您似乎缺少调试所需的模板标题中的debug="true" 项。

我还想快速浏览一下下面的博客文章,其中详细介绍了 T4 模板调试。

http://blogs.msdn.com/b/garethj/archive/2006/01/09/t4debugging.aspx?wa=wsignin1.0

【讨论】:

我也尝试过,只是为了确保我再次尝试过,运行模板并尝试再次调试。同样的问题...至于文章,我之前遇到过,我可以调试普通的 t4 模板,但是当我尝试调试预处理的模板时,我无法。【参考方案3】:

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

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

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

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

alias rl Macros.MyMacros.Module1.RemoveLineDirectives

因此,当我需要调试 预处理 T4 模板。删除#line 指令后,调试生成的模板类按预期工作。

不是理想的解决方案,但它有效:)

【讨论】:

以上是关于T4 预处理模板调试不起作用 - Visual Studio 2010 RTM的主要内容,如果未能解决你的问题,请参考以下文章

让 Visual Studio 在每次构建时运行 T4 模板

在 Visual Studio Code 中执行 T4 文本模板

MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板

Visual Studio代码PHP调试不起作用

使用 T4 模板的 Visual Studio MVC 脚手架非常慢

调试模式在 Visual Studio 2015 中不起作用