2011-10-19 106 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();