我知道这听起来很奇怪,但我需要在每个方法中放置一个包装try catch块来捕获所有异常.我们有数千种方法,我需要以自动方式完成.你有什么建议?
我打算解析所有cs文件并检测方法,并在应用程序中插入try catch块.你能告诉我任何我可以轻松使用的解析器吗?或任何有助于我的事......
每种方法都有其独特的数字,如5006
public static LogEntry Authenticate(....) { LogEntry logEntry = null; try { .... return logEntry; } catch (CompanyException) { throw; } catch (Exception ex) { logEntry = new LogEntry( "5006", RC.GetString("5006"), EventLogEntryType.Error, LogEntryCategory.Foo); throw new CompanyException(logEntry, ex); } }
我为此创造了这个; http://thinkoutofthenet.com/index.php/2009/01/12/batch-code-method-manipulation/
不要做.口袋妖怪("必须全部捕获")错误处理没有充分的理由.
编辑:几年后,需要稍作修改.我会说"至少不要手动做".使用AOP工具或Weaver(如PostSharp或Fody)将其应用于最终结果代码,但请务必考虑其他有用的跟踪或诊断数据点,如捕获执行时间,输入参数,输出参数等.
好吧,如果你必须这样做,那么你必须.但是,您可能会尝试与强迫您执行此操作的人交谈,以允许您使用AppDomain类的UnhandledException事件.在向用户报告之前,它会向您提供有关任何方法中每个未捕获异常的通知.由于您还可以从异常对象获取堆栈跟踪,因此您将能够确切地确定每个异常发生的位置.它比使用异常处理程序装配代码要好得多.
话虽如此,如果我必须这样做,我会使用一些正则表达式来识别每个方法的开始和结束,并使用它来在任何地方插入一些异常处理程序.为此案例编写正则表达式的技巧将在此处的MSDN文档中详细说明Balancing Group Definition .此处还有一个使用平衡组的相关示例.