AppDomain.CurrentDomain.FirstChanceException += FirstChanceException;
private static void FirstChanceException(object sender, System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs e)
{
// I would like to log exceptions happening outside my assembly?
// But this event does not receive external FirstChanceExceptions
// (unlike Visual Studio debug output)
myLogger.Log(e.Exception);
}
我想记录A first chance exception of type 'System.IO.IOException' occurred in WindowsBase.dll
但不记录 A first chance exception of type 'System.DivideByZeroException' occurred in MyApp.exe
外部dll依赖项中发生的异常可能会导致麻烦,即使它们在那里处理。
例如,由于异常,可以从外部方法返回 null 值(而不是返回 x 的所需输出),即使我的代码主要是处理这样的异常输出有用的是知道到底出了什么问题以及在哪里 - 因为虽然我可以避免致命的异常,但通常 null 值会使我的应用程序无法正常运行。因此,记录外部第一次机会异常将提供有价值的信息以帮助纠正问题/将 null 转换为 x 。这可能仅存在于给定的环境/特定用户等...
答案 0 :(得分:2)
您可以使用StackTrace类来检查异常的来源:
var stackTrace = new StackTrace(e.Exception);
var sourceFrame = stackTrace.GetFrame(0);
var throwingMethod = sourceFrame.GetMethod();
var sourceAssembly = throwingMethod.DeclaringType.Assembly;
var assemblyName = sourceAssembly.GetName().Name;
bool isMyApp = assemblyName == "MyApp";