7

我正在調試Visual Studio 2015中的.NET 4.0應用程序。我的應用程序生成並運行良好,但是當我嘗試編輯並在調試器下運行時繼續,無論我在主項目中做了哪些更改或做出了哪些更改,我都會看到一個對話框,內容如下:錯誤CS7038(未能發出模塊)只在編輯並繼續

進行了編輯,但無法編譯。執行不能繼續 ,直到編譯器錯誤得到解決。

作爲排序我談論變化的一個例子,我試圖加入這一行的各種方法:

Console.WriteLine("foo"); 

當我看到在Visual Studio中的錯誤列表窗格中,我看到只有一個錯誤,CS7038,描述「無法發射模塊'<my app name>'」。沒有給出文件名,行號或字符。我的代碼中沒有扭曲的紅色下劃線。如果我停止正在運行的應用程序,請使用更改進行構建,然後再次運行,所有內容都將生成並運行良好。所以編譯時編譯器和編譯和繼續編譯器認爲可以接受的東西似乎有一些差異。

有誰知道一種方法來獲取更多關於的信息爲什麼編輯在編輯和繼續模式下失敗?我讀了一些關於連接和調試VBCSCompiler進程的內容,所以我嘗試了這一點,但即使所有異常類型在拋出時都設置爲中斷,附加的VS也不會中斷。

我沒有分享任何代碼,因爲這不是關於我的代碼的問題,而是有關找出編輯和繼續編譯器認爲是錯誤的策略,而且我知道編譯器錯誤的來源可能在我整個項目中的任何地方。

編輯:

正如在評論中提到的,我能夠調試器附着在Visual Studio和突破時,一個異常被在點擊「繼續」編輯代碼後拋出。例外是System.NotSupportedException,並顯示以下消息:「在調試期間不允許更改程序集引用的版本」。它列出了有問題的程序集的名稱,這是我的應用程序使用的一個小型VB.Net項目,主要使用C#。我正在嘗試構建一個MCVE以提交給Microsoft,但目前我無法在僅使用一個VB和一個C#項目的較小解決方案中重現該問題。

編輯2:

我找到了一個解決方法和自我回答的情況下,任何人的問題遇到過這個奇怪的問題,但我保留了「回答」對號的人誰可以解釋發生了什麼(爲什麼編輯器認爲引用項目的版本號在編輯過程中發生了變化)。

+0

你是否殺死了VS的所有實例並重新啓動?你重置VS設置?如果沒有,我會從那裏開始。 – David

+0

我已經重新啓動VS,是的。沒有重置VS設置,這聽起來很可怕。有沒有辦法保存設置,以便在不能解決問題的情況下恢復它們? – adv12

+0

是的。轉到工具 - >導入和導出設置。從那裏你可以保存當前的設置(導出),重新加載舊的設置(導入)或全部重置。如果您選擇全部重置,則下一個屏幕會詢問您是否想要先導出當前設置(建議)。 – David

回答

2

我找到了解決該問題的方法,但我不完全理解發生了什麼。在其編譯版本編輯和繼續編譯器所說的VB.NET項目發生變化時,有一個名爲「AssemblyInfo.vb」的文件。該文件包含以下行:

<Assembly: AssemblyVersion("3.0.*")> 

程序集的版本也可以在項目屬性進行設置,通過在應用程序選項卡中的「程序集信息」按鈕:

screenshot of Visual Studio's Project Properties for the VB.NET project with AssemblyVersion set in two places

當我刪除來自AssemblyInfo.vb的AssemblyVersion行,我的編輯和繼續問題消失了。起初我以爲這是因爲Assembly Information窗口中的字段被保存到AssemblyInfo.vb的另一個文件中,並且兩者之間有一些衝突,但是現在我發現Assembly Information窗口只是編輯AssemblyInfo的一個方便方法.vb:如果我刪除了AssemblyInfo.vb中的行,它將在Assembly Information窗口中清除。

經過一番更多的實驗後,似乎版本號中的星號是罪魁禍首。如果我完全指定程序集版本,我的編輯和繼續問題就會消失。而被引用的項目必須是一個VB.NET項目。我嘗試了與C#項目相同的設置,並且我可以編輯並繼續。

這似乎是一個非常有邊緣的情況,我會向微軟提交一個錯誤報告,但同時我也想知道編譯器實際發生了什麼 - 爲什麼它會得到兩個不同的結果程序集的彙編版本在調試期間實際上不需要重新編譯....如果您對發生的事情有很好的解釋,請將其添加爲答案。

編輯here's the bug report I filed

+0

顯然,您的錯誤報告已被刪除... :-( – Heinzi