2015-12-31 22 views
1

我一直有一個問題與MVC 5.2.3(及更早版本回到約4)用剃刀(VB.NET)的意見,其中MVC Razor視圖調試問題映射不正確的文件(PDB產生錯誤?!)

1)我無法可靠地設置一個視圖(不工作的大部分時間,即使VS不給我,它無法綁定,它常常)

2A警告中斷點)當它擊中一個視圖中的異常,調試器常開錯了文件(可以檢查精細數值雖然!)

2B)檢查了異常的堆棧跟蹤顯示錯誤的文件!

3)有時在一個視圖中拋出的異常不能解決任何視圖文件在所有和調試器只是說,它無法找到源和堆棧跟蹤不顯示任何文件

我在多臺運行Windows 7和10的VS2013和2015的計算機上都有這個功能。我只是使用在原始項目模板中設置的默認路由。這一直持續了大概幾年。我認爲它影響到多個項目,但我最近一直關注最近的一個,所以不能確定地記得。

示例堆棧跟蹤 - 注意「沒有相關的源代碼行」和加下劃線的「OperationsMatrix.vbhtml」 - 沒有理由認爲應該包含視圖,如果沒有異常,它肯定不會呈現!正確的視圖是「AnalyticsReport.vbhtml」(第122行),它是從「SalesAnalytics.vbhtml」(第108行)中部分呈現的。調試器也被錯誤地打開「OperationsMatrix.vbhtml」在不相關的線(唯一在該行是一個lambda方法的最終分): stack trace

我已經在臨時文件看看它在堆棧跟蹤引用這似乎是剛剛被提及OperationsMatrix.vbhtml,使文件似乎是錯的太多,但它實際上並沒有似乎執行,因爲我可以修復AnalyticsReport.vbhtml的bug併發生異常停止。

修改一些代碼,然後再返回(即實際上是相同的代碼)改變它之後,它現在產生如下:

two

注意,現在有在上面提到的源代碼(從錯誤的文件--LiveStock.vbhtml),並且該文件現在出現在堆棧跟蹤的頂部附近,而不是找不到一個文件。放下來,OperationsMatrix似乎已經消失了,似乎無法找到任何東西。我非常肯定,第一個應該是AnalyticsReport,而第二個應該是SalesAnalytics。我很確定它也應該映射到Layout.vbhtml,這似乎不適用於這些嘗試(沒有注意到/不記得它是否曾經)。它看起來相當一致,無論是找不到任何東西,還是在同一個文件夾中找到另一個文件。

我剛剛再來看一下對於第二堆棧跟蹤Temp文件夾中生成的文件。 App_Web_grga51wc.3.vb似乎是一個不同的文件和App_Web_grga51wc.1.vb似乎是一個_Layout.vb。在#ExternalChecksum和#ExternalSource指令文件裁判似乎是正確的,所以我不認爲這個問題是在代碼生成或使用#ExternalSource指令從生成的文件中的代碼映射回原來的。問題似乎是它將IL編譯的代碼映射回錯誤的生成的源文件(推測是PDB文件的問題?)。我不知道如何或爲什麼會發生這種情況,或者爲什麼它似乎隻影響MVC項目而沒有其他任何內容。

對於絕對的說明,正在返回的視圖顯然是從同一個文件夾中隨機選擇的,並且不會以引發異常的錯誤視圖以任何方式引用。它們通常不被設計爲部分視圖,通常將它們用作局部視圖是沒有意義的 - 它們通常是完全無關的視圖,其被設計爲完全獨立於被調用的視圖而被使用。

我也試過刪除它正在使用的整個臨時文件夾,顯然乾淨和重建等。還試圖禁用VS分析工具。

nb。沒有與哪個視圖不正確地打開的一致性。當幾分鐘前我有一個稍微不同的例外時,另外一個正在打開。

任何想法?

+0

你能不能給一些具體的例子?就像屏幕截圖或Razor視圖行的複製/粘貼一樣,打開的文件和堆棧跟蹤? – Bardicer

+0

我已更新它。儘管視圖源代碼行是無關緊要的,但每當我在視圖中遇到異常時都會發生。 – wizzardmr42

+0

看起來您的第44行上的「行」可能是空的。如果它爲空,那可能是你的問題,因爲你會在沒有檢查該值先不爲空的情況下對空值進行if檢查。 – Bardicer

回答

4

終於搞定了!

在站點的web.config文件(根一個,而不是一個在瀏覽文件夾)的\有一個屬性如下: -

assemblyPostProcessorType="Microsoft.VisualStudio.Enterprise.Common.AspPerformanceInstrumenter, Microsoft.VisualStudio.Enterprise.AspNetHelper, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 

我已刪除該屬性和它似乎現在正在調試好!看起來VS2013在我最初創建項目時添加了這個功能,並且它一直在破壞生成的DLLs/PDB,並且搞亂了調試。

爲了澄清,如果任何人有問題,編譯打開的標籤,現在看起來就像

<compilation debug="true" targetFramework="4.5">