2014-09-24 33 views
0

我正在將.Net Framework 2.0應用程序遷移到.Net Framework 4.0。.Net 4.0和.Net 2.0中的異常代碼更改

因爲我有一個程序來獲取異常代碼,當一個異常提出。但不幸的是,.Net Framework 2.0和.Net Framework 4.0之間的Exception代碼有所不同。下面是我的代碼

try 
{ 
     throw new DirectoryNotFoundException(); 
} 
catch (Exception ex) 
{ 
     MessageBox.Show(Marshal.GetExceptionCode().ToString()); 
} 

上述程序返回「-532459699」用於.NET Framework 2.0,並返回「-532462766」爲框架4.0

有沒有什麼辦法讓異常代碼與.Net Framework 2.0相同?

+0

Marshal.GetExceptionCode甚至適用於正常的託管異常嗎? – Dirk 2014-09-24 11:59:53

+0

在MSDN上的註釋部分中提到:'GetExceptionCode只針對結構化異常處理(SEH)的編譯器支持提供' – Magnus 2014-09-24 12:03:13

+0

您看到的異常太多了,請參閱http://stackoverflow.com/a/9164144/426894和http ://stackoverflow.com/a/19919001/426894 – asawyer 2014-09-24 12:05:55

回答

2

這不是用於託管的異常處理。如果你看一下Marshal類的描述,使得該很清楚:

提供的方法的集合分配非託管內存,複製非託管內存塊,將託管到非託管類型,以及其他雜項方法與非託管代碼交互時使用。

爲什麼你會得到不同的代碼呢?實際上這並不值得討論,因爲該異常代碼不是來自您的託管應用程序。重要性來處理它會是這樣的正確方法:

try { } 
catch (DirectoryNotFoundException ex) { } 

,現在你知道是拋出的異常。

1

您對隱含問題的回答「這些代碼爲什麼不同?「你不應該在乎,這是一個實現細節」

如果您的實際問題是「我如何識別異常?」,參見How to get Exception Error Code in C#