完整訊息文字:評估函數 'function' 超時,必須以不安全的方式終止。 此問題可能會導致目標程序損壞。
為了讓您更輕鬆地檢查 .NET 物件的狀態,偵錯工具會自動強制偵錯進程執行其他程式碼 (通常是屬性 getter 方法和 ToString 函式) 。 在大多數情況下,這些功能可以快速完成,並使調試更容易。 不過,偵錯工具不會在沙箱中執行應用程式。 因此,呼叫停止回應的原生函式的屬性 getter 或 ToString 方法可能會導致可能無法復原的長逾時。 如果您遇到此錯誤訊息,則表示發生錯誤。
此問題的一個常見原因是,當偵錯工具評估屬性時,它只允許執行正在檢查的執行緒。 因此,如果屬性正在等候其他執行緒在偵錯的應用程式內執行,而且如果它以 .NET 執行階段無法中斷的方式等候,就會發生此問題。
更正這個錯誤
請參閱下列各節,以取得此問題的數個可能解決方案。
解決方案 #1:防止偵錯工具呼叫 getter 屬性或 ToString 方法
錯誤訊息會告訴您偵錯工具嘗試呼叫之函式名稱。 如果您可以修改此函式,您可以防止偵錯工具呼叫屬性 getter 或 ToString 方法。 請嘗試下列其中一項:
將方法變更為屬性 getter 或 ToString 方法以外的其他類型的程式碼,問題就會消失。
-或-
(對於 ToString)在類型上定義 DebuggerDisplay 屬性,您可以讓偵錯工具評估 ToString 以外的專案。
-或-
(對於屬性獲取者)將 System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never) 屬性放在屬性上。 如果您有一個方法需要出於 API 相容性原因保留屬性,這會很有用,但它實際上應該是一個方法。
解決方案 #2:讓目標程式碼要求偵錯工具中止評估
錯誤訊息會告訴您偵錯工具嘗試呼叫之函式名稱。 如果屬性 getter 或 ToString 方法有時無法正確執行,特別是在問題是程式碼需要另一個執行緒來執行程式碼的情況下,則實作函式可以呼叫 System.Diagnostics.Debugger.NotifyOfCrossThreadDependency 來要求偵錯工具中止函式評估。 使用此解決方案,仍然可以明確評估這些函式,但預設行為是當 NotifyOfCrossThreadDependency 呼叫發生時,執行會停止。
解決方案 #3:停用所有隱含評估
如果先前的解決方案無法修正問題,您可以停用 [啟用屬性評估和其他隱含函式呼叫] 選項。 此設定會停用大部分隱含函式評估,應該會解決此問題。
在 [工具>選項] 窗格中,展開 [ 所有設定>偵錯>一般 ] 區段,然後清除 [啟用屬性評估和其他隱含函式呼叫] 複選框。
在 [工具>選項] 對話方塊中,展開 [偵錯一般>] 區段,然後清除 [啟用屬性評估和其他隱含函式呼叫] 複選框。
解決方案#4:檢查與第三方開發人員工具的兼容性
如果您使用 Resharper,請參閱此 問題 以取得建議。