好吧,也许是一个奇怪的问题,但是我如何处理仅来自应用程序中某些程序集的未处理异常,但包括源自.NET本身的异常,例如当您获得它源自的ADO.NET异常时。 NET程序集。
我需要这个,因为我需要处理遗留应用程序,我只需要对包含多个程序集的模块进行未处理的异常处理,并且最终所有内容都在同一个应用程序中,作为同一过程的一部分。
我是否可以在汇编级别捕获异常,而不是全局应用程序级别?
答案 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使用反射过滤每个装配。