在 Visual Studio 2010 C# 项目中,如何确定是否编写了没有 try-catch 块的任何方法?
有时作为代码审查者,很难搜索未根据代码标准正确编写的函数/方法,尤其是:没有 try-catch 块。
我知道 Visual Studio 中的Find选项支持正则表达式。但是可以巧妙地完成这项工作的正则表达式是什么?
在 Visual Studio 2010 C# 项目中,如何确定是否编写了没有 try-catch 块的任何方法?
有时作为代码审查者,很难搜索未根据代码标准正确编写的函数/方法,尤其是:没有 try-catch 块。
我知道 Visual Studio 中的Find选项支持正则表达式。但是可以巧妙地完成这项工作的正则表达式是什么?
编辑(首先给出直接答案):实际上很容易使用Assembly.ReflectionOnlyLoadFrom,然后枚举类型和这些类型的方法,然后为每个方法体检查ExceptionHandlingClauses。
评论如下:
Red Gate 曾经提供Exception Hunter工具来追踪可能的异常问题。如该页面所述,即使在自动分析工具的帮助下,您所请求的特定任务(广泛搜索任何未处理的异常)也不会导致更高质量的软件。
如果我需要查找没有受保护区域的所有方法的列表,我可以简单地使用我的一个实验性程序集加载器(根据 ECMA-335 相对容易地编写)并检查 ECMA-335,分区 II 中描述的元数据, §25.4.5 和 §25.4.6(更容易使用这个答案的第一部分)。如果我需要找到这些方法的列表以便为每个方法添加受保护区域以符合编码标准,我会报告他们需要找到另一个开发人员来执行此操作,因为我故意和故意拒绝降低我工作的软件的质量。
如果您有权访问 Visual Studio 2012(测试版可免费下载!),您可以使用“搜索代码克隆”选项。
通常这将搜索您的整个解决方案,但您可以将其范围限定为特定的代码段。您可以轻松地使用它来查找所有代码,例如,使用一次性对象。然后,您可以检查是否在任何地方都使用了 using 语句。
同样的机制可用于检查某段代码是否在 try/catch 块中使用。
这是一些 MSDN文档。
我认为您可以使用Roslyn来处理代码,并通过检查表达式树来查找哪些方法具有或不具有 try/catch 块。
我不建议您使用正则表达式来做到这一点。您必须编写一个非常复杂的脚本,该脚本将是一个基于方法块何时开始和何时完成的状态机,然后检查其中是否有 try-catch。