解決 .NET COM 互動中的 AccessViolationException
在 .NET 應用程式中使用 COM 物件時,System.AccessViolationException
可能會意外繞過 try-catch
區塊。 這通常會導致調試困難和應用程式在開發環境之外崩潰。
損壞狀態異常 (CSE) 的作用
此行為主要是由於 .NET 4.0 的損壞狀態異常 (CSE) 機製造成的。 某些異常(包括 AccessViolationException
)被歸類為 CSE,表示潛在的關鍵進程狀態。 標準託管程式碼 try-catch
區塊無法攔截這些異常。
處理 CSE 的策略
要有效管理源自 COM 物件呼叫的 AccessViolationException
,請考慮以下方法:
目標 .NET Framework 3.5: 為 .NET Framework 3.5 重新編譯應用程式。 在 .NET 4.0 環境中執行此 3.5 組件可能會解決該問題。
設定舊版異常策略: 透過在 app.config
元素中加入以下內容來修改應用程式的設定檔(web.config
或 <configuration>
):
<code class="language-xml"><legacyCorruptedStateExceptionsPolicy enabled="true" /></code>
設定 enabled="true"
允許運行時以與早期 .NET 版本相容的方式處理 CSE。
HandleProcessCorruptedStateExceptions
屬性: 使用 [HandleProcessCorruptedStateExceptions]
屬性註解易受 CSE 影響的方法。有關詳細的使用說明,請參閱 Microsoft 的文件。 此屬性向運行時發出信號,允許該方法處理 CSE。 這些方法提供了處理異常的替代方法,否則在使用 COM 物件時會逃避 .NET 中的標準異常處理機制。
以上是使用 COM 物件時,為什麼我的 Try-Catch 區塊無法擷取 .NET 中的 AccessViolationException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!