[英]Edit and Continue: "Changes are not allowed when..."
即使我創建了一個干凈的 WinForms 項目,“編輯並繼續”也不起作用並給我以下錯誤:
當調試器已附加到已運行的進程或正在調試的代碼在構建或運行時優化時,不允許更改。
我還在 MSDN 網站上找到了這篇文章:
不支持的場景
編輯並繼續在以下調試場景中不可用:
調試 Windows 98.
混合模式(本機/托管)調試。
SQL調試。
調試 Dr. Watson 轉儲。
在未處理的異常之后編輯代碼,當未選擇“Unwind the call stack on unhandled exceptions”選項時。
調試嵌入式運行時應用程序。
使用“附加到”調試應用程序,而不是使用“調試”菜單中的“啟動”運行應用程序。
調試優化代碼。
當目標是 64 位應用程序時調試托管代碼。 如果要使用“編輯並繼續”,則必須將目標設置為 x86。(項目屬性、編譯選項卡、高級編譯器設置。)。
在新版本由於構建錯誤而無法構建后調試舊版本的代碼。
但我可以對這份清單中的每一項都回答“否”。
之前可以用,前幾天就不行了,不知道是什么原因。
如果您*正在嘗試快速修復“編輯並繼續”,下面是一個不完整的、未排序的可能解決方案列表。
確保您處於調試模式
確保您沒有啟動混合模式進程
嘗試將 CPU 目標設置為x86而不是AnyCPU (在 x64 機器上)
在項目屬性->調試中取消選中調試模式的優化代碼復選框
在Project Properties->Build中取消選中Optimize Code復選框
取消選中高級編譯器設置中的啟用優化
(ASP.NET)檢查nightcoder 的答案是否是這種情況
(ASP.NET)檢查這個答案(通過 matrixugly)如果是這種情況
(ASP.NET) 確保在Web選項卡上啟用了編輯並繼續(vs2010)
(ASP.NET) Go 到Properties > Web > Servers ,並確保在Use Visual Studio Development Server下選中Enable and continue 。
(ASP.NET WebAPI) 在嘗試編輯它之前,請確保您已使用斷點在 Controller 的方法中停止。
(vs2017) Go 到工具 > 選項 > 調試並取消選中(取消選擇)“編輯並繼續”。 這實際上與“傳統”建議相反(請參閱本文中的其他一些要點)。 它不允許您實際對正在運行的程序進行更改(即它不會熱交換您所做的代碼更改) - 它只是允許您編輯您的代碼(即它可以防止煩人的消息和“鎖定”您的編輯器).
Go 到工具 > 選項 > 調試 > 常規並確保未選中要求源文件與原始版本完全匹配。
檢查啟用 Windows 調試堆分配器(僅限本機)[VS Community 2017]
您使用的是 Microsoft Fakes 嗎? 它禁止編輯並繼續。
通過在任務管理器中選擇結束進程樹來終止所有*.vshost.exe實例。 VS 將重新生成一個正確的實例。
使用Debug->Delete All Breakpoints 刪除所有斷點
Enable and Continue存在於Tools > Options > Debugging菜單和Project Settings中。 一定要檢查這兩個地方。 擴展的 Intellitrace 設置不支持編輯並繼續。
確保項目屬性中的調試信息> 構建 > 高級 > Output > 調試信息設置為完整
某些插件可能會干擾。 通過禁用/卸載然后重試其他解決方案進行檢查。
如果您沒有給予足夠的重視,您在嘗試解決此問題時遇到的錯誤可能會變成其他更容易診斷的錯誤。 例如,包含 lambda 表達式的方法不支持編輯並繼續。
確保系統變量COR_ENABLE_PROFILING
未設置為1
。 一些分析器在安裝時設置它並在卸載后保持原樣。 打開命令提示符並鍵入set
以快速檢查您的系統是否受到影響,如果是,請刪除變量或將其設置為0
:
COR_ENABLE_PROFILING
*“您”是指正在敲擊鍵盤以尋找解決方案的頁面訪問者。
如果此處未列出,請隨意編輯此答案以添加您的解決方法!
如果您正在調試 ASP.NET 應用程序,go 到屬性 > web > 服務器,並確保在使用 Visual Studio 開發服務器下選中“啟用並繼續”。
我終於解決了這個問題: UNINSTALL Gallio
Gallio 似乎有很多粗糙的邊緣,最好不要使用 MbUnit 3.0,而是使用 MbUnit 2.0 框架,但使用 gallio runner,你無需從安裝程序(它還安裝了 visual studio 插件)安裝即可運行。
順便說一句,即使在“禁用”他的 Gallio 插件之后我也遇到了這個問題。 只有卸載解決了問題。
附言。 由 nightcoder 編輯:
在我的案例中,禁用 TypeMock Isolator (模擬框架)終於有所幫助! 編輯並繼續現在有效!!!
這是 TypeMock 支持的答案:
在進一步調查編輯並繼續問題並與 Microsoft 討論后,我們得出結論,它無法為 Isolator 解決。 Isolator 實現了一個 CLR 分析器,根據我們的研究,一旦啟用並附加了 CLR 分析器,編輯和繼續將自動禁用。 很抱歉,這不再被視為錯誤,而是 Isolator 的限制。
我有同樣的問題。 我什至重新安裝了 VS 2008 但問題並沒有 go 消失。 但是,當我刪除所有斷點時,它就開始工作了。
Debug->Delete All Breakpoints
我認為這是因為我刪除了一個在其代碼中有斷點的 aspx 頁面,然后我創建了另一個具有相同名稱的頁面。 這可能混淆了 VS 2008。
“編輯並繼續”啟用后,將僅允許您在處於中斷模式時編輯代碼:例如,通過異常暫停執行或命中斷點。
這意味着您無法在執行未暫停時編輯代碼,在調試 (ASP.NET) web 項目時,這是非常不直觀的。 因為您經常希望在請求之間進行更改,此時,您(可能)正在調試的代碼沒有運行,但也沒有暫停!
要解決此問題,您可以單擊“全部中斷”(或按Ctrl + Alt + Break )。 或者,在某處設置一個斷點(例如在您的Page_Load
事件中),然后重新加載頁面,以便在遇到斷點時暫停執行,現在您可以編輯代碼。 甚至.cs
文件中的代碼。
有幾件事要檢查
編輯
我認為這無關緊要,但請確保為目標平台啟用了托管過程。 可能幫不上忙
如果它為新項目重新制作,那么它可能會更加微妙。 我會嘗試以下。
以上解決方案都不適合我(在 64x 機器上運行)。
最后,我單擊了'advanced compiler settings'
和未選中'enable optimizations
”,現在我可以在調試時單步執行代碼和編輯。
拍攝后幫助我使用 VS2010:
go 到工具、選項、調試、常規,並確保取消選中“要求源文件與原始版本完全匹配”。
對我來說,出於我不明白的原因,“高級編譯器設置”中的“生成調試信息”設置被設置為“僅 pdb”而不是“完整”。
默認情況下,此參數始終設置為“Full”,但昨晚一位神秘的惡作劇者更改了此參數。 :)
PS 我在 Visual Basic.Net 中使用 Visual Studio 2010
如果您擔心 ASP.NET 應用程序,請確保您已在 web 選項卡 (vs2010) 上啟用編輯並繼續。 在早期版本中也有單獨的 ASP.NET 調試設置。
問候,
亞當。
我發現即使在項目屬性下構建和調試選項卡設置為調試並且所有其他設置都是正確的我仍然收到消息,但是在構建菜單 select 配置管理器下挖掘更多...並確保選擇調試也有兩個地方。 go 圖...他們需要設置調試多少個不同的地方????? 即使您將 Project - Configuration 設置為 Debug 然后在 Build - Manager 下它也沒有改變,所以您也在那里更改了相同的設置 Project Configuration - 似乎又是一個微軟問題......
這個問題是由於 Intellitrace 設置
如果啟用了 Intellitrace,請確保僅選中 Intellitrace 事件
否則這將不允許編輯並繼續..
如果您單擊 Intellitrace 選項,您將看到警告。
當調試器沒有遇到斷點或者你沒有遇到 Break All(暫停)時,就會發生這種情況。 不可能這么簡單吧?
我在 Microsoft Visual Studio 2008 中遇到過這個問題,解決方案很簡單。 當你運行你的項目時,請設置為“調試”模式而不是“發布”。 另一個人的解決方案可能很有用。
該錯誤表明可能的原因是:“正在調試的代碼在構建或運行時進行了優化”。 Go 到 Project Properties->Debug 並取消選中 Debug 模式的 Optimize Code 框。
我今天遇到了這個問題——事實證明,將調試信息設置為 pdb-only(或者沒有,我想)會阻止編輯和繼續工作。
首先確保您的調試信息設置為“完整”!
項目屬性 > 構建 > 高級 > Output > 調試信息
如果我創建一個新項目,調試時的編輯不起作用。 如果我創建一個新網站,則在調試時按預期進行編輯。
我從我的項目中刪除了一個數據集,因為我沒有使用它。 之后我可以在調試時修改程序。
我做了所有其他答案中提到的所有更改,但沒有任何效果。 我學到了什么? 啟用並繼續存在於工具 > 選項 > 調試菜單和項目設置中。 在我檢查了兩者之后,啟用和繼續對我有用。
在我的例子中,只需重置為默認調試器設置並設置 IntelliTrace-> only intellytrace events 幫助
似乎不合邏輯,但唯一的方法是禁用編輯並從 VS 2017 選項繼續......然后 AspNet 編輯並繼續開始工作......
對我有用的是取消選中下的“使用托管兼容模式”
工具 -> 選項 -> 調試
TBN:選中或取消選中“要求源文件與原始版本完全匹配”似乎不會影響 E&C
希望這能有所幫助。
啟用編輯並繼續僅運行 IIS Express。 不要在本地 ISS 或外部主機中工作。
我正在添加我的答案,因為尚未明確提及為我解決問題的事情。 實際上幫助我的是這篇文章:
這是解決方案的簡短描述:
請注意這是多么違反直覺:我不得不禁用(取消選中)“啟用編輯並繼續”。
這將允許您在編輯器中更改代碼,而不會收到“代碼運行時不允許更改”的消息。
但是請注意,您所做的代碼更改不會反映在您正在運行的程序中 - 因為您需要停止並重新啟動您的程序(我認為模板/ASPX 更改確實得到反映,但不是 VB/C#更改,即“代碼隱藏”代碼)。
自從我將 VS 2019 升級到 16.4.3 后,我遇到了這個惱人的問題,這讓我很頭疼。
最后我用這種方式解決了問題:
1.停止調試
2. Select 來自“Solution Explorer”的解決方案
window change the Property From "Release|Any CPU" To "Debug|Any CPU" 3. 在window 中,將屬性從“Release|Any CPU”更改為“Debug|Any CPU”
4. 在 Debug > Options > General 中選中Edit and Continue復選框
這對我有用,希望它也對你有用。
一些似乎有助於使用 VS2010 的事情:
嵌入互操作類型 visual studio 應設置為 false
我在鏈接的 class 文件中發生了這種情況。 項目的rest允許E&C,但是我在編輯鏈接文件時出現了同樣的錯誤。 解決方案是將鏈接文件分解為它自己的項目並引用該項目。
我遇到了同樣的問題。 我的問題是我可以修改一個文件,但不能修改另一個文件(兩者都在同一個項目中)。 后來我發現我無法修改的文件也是另一個項目的一部分。 另一個項目(單元測試)未加載,智能VS 調試器顯示錯誤,即未加載此給定文件的程序集,並且不允許更改。 多么奇怪!
因此,我不得不卸載單元測試項目並繼續 EnC 調試。
我在解決方案中有一個數據庫項目,它阻止了 webforms 項目被編輯。
我在數據庫項目上單擊了“卸載”,現在一切正常。
對於 VS2017,它可以幫助刪除解決方案中的 .suo 文件,它對我有用。 :)
我在 Visual Studio 2005 中遇到了同樣的問題。我的配置是 64 位。 它在其中一個 VS 解決方案上運行良好,但在另一個上運行良好。 我注意到我只為我想在調試模式下進行更改的項目啟用了“啟用編輯並繼續”。 當我也為我的啟動項目選擇“啟用並繼續”時,這終於為我解決了。
除了需要啟用和繼續之外,沒有配置更改。
對我來說,它發生在我遇到斷點之后,進行了一些編輯,然后繼續單步執行代碼,最后按 F5 或“繼續”以到達代碼塊的末尾並退出。
在嘗試“刪除所有斷點”選項(按 Ctrl+Shift+PrtScn 並按提示確定)並執行全部重建后,我的錯誤日志中仍然有關於我的項目未加載的 DLL 的錯誤...”無法應用更改,x.DLL 未加載”。 重新啟動 Visual Studio 后,一切又好了。 對我來說,原來就是這么簡單。
這里的其他東西對我不起作用,比如在事情再次開始工作之前和之后檢查了“要求源文件與原始版本完全匹配”,並且在我的 x64 機器上定位“任何 CPU”也很好(做了不需要指定 x86 或 x64)。 我在“工具”>“選項”>“調試”和“項目屬性”>“Web”選項卡設置中啟用了“啟用編輯並繼續”。
在 Rider 中遇到了這個問題。 我直接打開了.csproj
文件而不是.sln
文件。 結果是運行時配置沒有設置為調試,即使我點擊了調試按鈕。 您會注意到它在調試按鈕旁邊的工具欄中顯示<No Configurations>
。
VS2019 - ASP.NET Forms 在我的例子中是工具 - 選項 - Windows Forms 設計器 - “優化代碼生成” <- 為假
自 VS2013 以來,“編輯並繼續”不適用於這兩個特定項目,因此我保留了這些項目。 讓它在 VS2022 上運行的新嘗試終於找到了原因:
出錯時
如果您在 On Error 中編輯代碼,您會收到“所做的編輯無法編譯”錯誤。 將錯誤列表顯示選項設置為 Build + Intellisense,您最終會看到錯誤“圍繞活動語句更新 On Error 語句需要重新啟動應用程序”,這是阻止繼續執行的原因。
可悲的是,出於非常具體的原因,我有意為這兩個特定項目保留了這種遺留錯誤處理方法,並且需要 go 進行結構化錯誤處理是一個主要的生產力挫折。
但是現在我需要使用一些不再與 VS2013 兼容的更現代的庫,所以我不得不繼續前進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.