2011-10-19 255 views
1

好吧,也許一個奇怪的問題,但我會如何處理未處理只從位於應用有一定的組件例外,但包括例外,從.NET本身的起源,例如像當你得到一個ADO .NET異常源於.NET程序集。處理未處理的異常

我需要這個,因爲與遺留應用程序一起工作,我只需要對一個由多個程序集組成的模塊進行未處理的異常處理,並且作爲同一進程的一部分,最後所有程序都在同一個應用程序中。

我可以或許趕上裝配水平的異常,而不是在全球的應用程度?

+0

丹尼斯,只是出於好奇:在以下任何有用的答案給你的是你還在等待銀子彈? –

回答

2

只是檢查堆棧跟蹤,並使用throw;如果你不應該處理異常。

try 
{ 
    //something 
} 
catch (Exception err) 
{ 
    if (!err.StackTrace.Contains("YourAssemblyName")) 
     throw; 
} 
+0

是的,我認爲這是很好的,但堆棧跟蹤包含文件夾名稱爲好,如果某些文件夾作爲大會 –

+0

命名相同的東西包括像'「YourAssemblyName」'的空間。 – jgauffin

+1

我很抱歉,但你能解釋一下怎麼會在這種情況下,空間的幫助? –

0

當然,我不知道來電要隔離組件的數量,所以我不知道這是可行的,但對我來說,似乎是在創建模塊周圍門面你說大概是適當的。

門面將捕捉從這些具體的組件拋出的異常,並可能重新拋出一個自定義異常與原來的異常作爲InnerException。自定義異常很容易被全局異常處理程序識別。

1

沒有,但你可以在應用程序域級別趕上。如果修改是有關您的應用程序嘗試:

編輯:

 AppDomain otherAppDomain = AppDomain.CreateDomain("myDomain"); 
     otherAppDomain.UnhandledException += new UnhandledExceptionEventHandler(otherAppDomain_UnhandledException); 
     Assembly assembly = otherAppDomain.Load("TheAssemblyThatThrows"); 
     // But you might need to have MyClass inherit from MarshalByRefObject 
     MyClass instance = (MyClass)otherAppDomain.CreateInstanceAndUnwrap("TheAssemblyThatThrows", "MyClass"); 
     instance.DoSomething();