仅处理来自某些程序集的未处理异常

时间:2011-10-19 13:48:26

标签: c# .net winforms exception

好吧,也许是一个奇怪的问题,但是我如何处理仅来自应用程序中某些程序集的未处理异常,但包括源自.NET本身的异常,例如当您获得它源自的ADO.NET异常时。 NET程序集。

我需要这个,因为我需要处理遗留应用程序,我只需要对包含多个程序集的模块进行未处理的异常处理,并且最终所有内容都在同一个应用程序中,作为同一过程的一部分。

我是否可以在汇编级别捕获异常,而不是全局应用程序级别?

4 个答案:

答案 0 :(得分:2)

如果您不应该处理异常,只需检查堆栈跟踪并使用throw;

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

答案 1 :(得分:1)

不,但你可以捕获AppDomain级别。如果修改与您的应用程序相关,请尝试:

编辑:

        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();

答案 2 :(得分:0)

当然我不知道你想要隔离的程序集的调用次数,所以我不知道这是否可行,但对我来说,似乎在你正在讨论的模块周围创建一个外观是合适的。

Facade将捕获从这些特定程序集中抛出的异常,并可以重新抛出自定义异常,原始异常为InnerException。全局异常处理程序可以轻松识别自定义异常。

答案 3 :(得分:-1)

你可以从头编写一个,但http://code.google.com/p/elmah/是处理未处理异常的一个很好的框架!

然后,您可以使用http://code.google.com/p/elmah/wiki/ErrorFiltering使用反射过滤每个装配。