2012-05-09 23 views
17

Tôi có ứng dụng giao diện điều khiển .NET và mã nguồn gốc hỗn hợp. Quá trình ứng dụng được chấm dứt do lỗi Visual C RunTime Library gây tử vong. Mặc dù tôi đang sử dụng sau đây, các mã được quản lý không nắm bắt những ngoại lệ có nguồn gốc:Không thể bắt ngoại lệ gốc trong mã được quản lý

  1. try/catch block
  2. AppDomain.UnHandledExption += ...
  3. Đánh dấu sự RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true) trong file AssmblyInfo.

Tôi còn có thể làm gì khác?

Trả lời

21

Ngoại lệ gốc đã thay đổi trong .NET 4 sao cho chúng không thể bị bắt với khối catch chuẩn. Bạn đặc biệt phải đánh dấu chức năng mà trường hợp ngoại lệ bị ném là [HandleProcessCorruptedStateExceptions] để có thể bắt được nó.

More đây, http://msdn.microsoft.com/en-us/magazine/dd419661.aspx

Xem ra cho các ghi chú trong bài viết rằng, giống như nếu bạn muốn bắt họ thường chứ không phải là làm theo lời khuyên của họ về thực hiện các khối finally và thoát, thêm legacyCorruptedState­­ExceptionsPolicy=true vào tập tin cấu hình của bạn .

+0

Điều này đã giúp tôi rất nhiều. Cảm ơn nhiều. – Newbee

-2

Catch without() sẽ bắt ngoại lệ tuân thủ non-CLS bao gồm ngoại lệ gốc.

try 
{ 

} 
catch 
{ 

} 
+0

Đã thử và không hoạt động đối với tôi. – DoronBM

+0

Tôi đã đưa ra nhận xét của mình dựa trên quy tắc FxCop này .. http://msdn.microsoft.com/en-gb/bb264489.aspx Rất tiếc, nó không hoạt động .. – Oscar

Các vấn đề liên quan