好吧,也许一个奇怪的问题,但我会如何处理未处理只从位于应用有一定的组件例外,但包括例外,从.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();
丹尼斯,只是出于好奇:在以下任何有用的答案给你的是你还在等待银子弹? –