好吧,也許一個奇怪的問題,但我會如何處理未處理只從位於應用有一定的組件例外,但包括例外,從.NET本身的起源,例如像當你得到一個ADO .NET異常源於.NET程序集。處理未處理的異常
我需要這個,因爲與遺留應用程序一起工作,我只需要對一個由多個程序集組成的模塊進行未處理的異常處理,並且作爲同一進程的一部分,最後所有程序都在同一個應用程序中。
我可以或許趕上裝配水平的異常,而不是在全球的應用程度?
好吧,也許一個奇怪的問題,但我會如何處理未處理只從位於應用有一定的組件例外,但包括例外,從.NET本身的起源,例如像當你得到一個ADO .NET異常源於.NET程序集。處理未處理的異常
我需要這個,因爲與遺留應用程序一起工作,我只需要對一個由多個程序集組成的模塊進行未處理的異常處理,並且作爲同一進程的一部分,最後所有程序都在同一個應用程序中。
我可以或許趕上裝配水平的異常,而不是在全球的應用程度?
只是檢查堆棧跟蹤,並使用throw;
如果你不應該處理異常。
try
{
//something
}
catch (Exception err)
{
if (!err.StackTrace.Contains("YourAssemblyName"))
throw;
}
是的,我認爲這是很好的,但堆棧跟蹤包含文件夾名稱爲好,如果某些文件夾作爲大會 –
命名相同的東西包括像'「YourAssemblyName」'的空間。 – jgauffin
我很抱歉,但你能解釋一下怎麼會在這種情況下,空間的幫助? –
你可以寫一個從頭開始,但http://code.google.com/p/elmah/是用於處理未處理的異常大的框架!
然後你可以使用http://code.google.com/p/elmah/wiki/ErrorFiltering使用反射每個裝配過濾。
見標籤「的WinForms」。 –
糟糕!我的錯!注意自我,在發佈之前閱讀所有標籤:) –
當然,我不知道來電要隔離組件的數量,所以我不知道這是可行的,但對我來說,似乎是在創建模塊周圍門面你說大概是適當的。
門面將捕捉從這些具體的組件拋出的異常,並可能重新拋出一個自定義異常與原來的異常作爲InnerException
。自定義異常很容易被全局異常處理程序識別。
沒有,但你可以在應用程序域級別趕上。如果修改是有關您的應用程序嘗試:
編輯:
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();
丹尼斯,只是出於好奇:在以下任何有用的答案給你的是你還在等待銀子彈? –