2010-08-17 79 views
8

我試圖調試一個預處理的T4模板,我無法進入通過運行預處理模板創建的類。我可以創建類的一個實例,但只要我嘗試着進入調試階段,就會彈出一個新窗口,說T4預處理模板調試不工作 - Visual Studio 2010 RTM

沒有可用的源代碼。沒有可用於當前位置的源代碼。

我的理解是,預處理模板可以調試,就像一個正常的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模板沒有任何影響。有任何想法嗎?

+0

這聽起來像您使用的是有形的T4編輯器,它表現出了這個問題。如果你禁用了這個編輯器,你會發現調試一個預處理模板會把你帶到tt文件本身的正確位置。 如果你真的想調試生成的C#/ VB文件,那麼Paiden用於刪除下面介紹的#line指令的技術是一個不錯的方法。 – GarethJ 2011-09-21 23:48:47

+0

查看相關問題http://stackoverflow.com/q/2945450/141172 – 2012-07-24 03:33:54

回答

1

看起來你錯過了調試所需的模板頭的debug="true"項。

另外我會快速瀏覽以下博客文章,其中詳細介紹了T4模板調試。

+0

我曾嘗試過,並且只是爲了確保我再次嘗試了它,運行了模板並嘗試再次進行調試。同樣的問題... 至於文章,我曾經遇到過,我可以調試一個正常的t4模板,但是當我嘗試調試預處理模板時,我無法做到。 – user423293 2010-08-17 20:23:02

1

更新 - 從MSDN論壇一些幫助,它看起來像問題是與被添加到生成的C#類#line指令。將它們評論出來,可以讓我像預期的那樣逐步完成代碼。有什麼辦法可以防止這些指令被添加到生成的類中嗎?用ASP。NET頁面中,您可以添加LinePragmas =「false」參數,但對T4模板沒有任何影響。有任何想法嗎?

#line指令調試時預處理的 T4模板(調試器始終搜索的* .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模板時,通過在命令窗口中簡單地調用rl,生成的* .cs文件處於活動狀態,執行#line指令。刪除#line指令後,調試生成的模板類將按預期工作。

不是理想的解決方案,但它的工作原理:)