关于c#:如何在没有尝试catch块的情况下找出是否编写了任何方法

How to find out if any method is written without having try catch block

在Visual Studio 2010 C项目中,如何确定是否在没有try-catch块的情况下编写了任何方法?

有时作为代码审阅者,它很难搜索没有按照代码标准正确编写的函数/方法,特别是:没有try-catch块。

我知道Visual Studio中的find选项支持正则表达式。但是,什么样的正则表达式可以巧妙地执行这个任务呢?


编辑(首先输入直接答案):实际上很容易使用assembly.reflectiononlyloadFrom,然后枚举这些类型的类型和方法,然后针对每个方法体检查exceptionhandlingClause。

评论如下:

红门用来提供异常搜索工具来跟踪可能的异常问题。如该页所述,您请求的特定任务(广泛搜索任何未处理的异常)即使在自动分析工具的帮助下也不会导致更高质量的软件。

如果我需要找到没有保护区域的所有方法的列表,我可以简单地使用我的一个实验装配加载程序(根据ECMA-335相对容易地编写)并检查元数据,如ECMA-335,分区II,?5.4.5和?25.4.6中所述(更容易使用此答案的第一部分)。如果我需要找到这些方法的列表,以便为每个方法添加一个受保护的区域,以符合编码标准,我会反馈说,他们需要另一个开发人员这样做,因为我拒绝故意降低我工作的软件的质量。


如果您有权访问Visual Studio 2012(试用版是免费下载!),可以使用"搜索代码克隆"选项。

通常,这将搜索整个解决方案,但您可以将其范围限定到特定的代码段。您可以很容易地使用它来查找所有使用一次性对象的代码。然后,如果在任何地方都使用了using语句,则可以勾选。

同样的机制也可用于检查某段代码是否在try/catch块中使用。

这是一些MSDN文档。


我认为通过检查表达式树,您可以使用Roslyn来处理代码,并找出哪些方法有或没有try/catch块。

我不建议你用regex来做这个。您必须编写一个非常复杂的脚本,它将是一个状态机,基于方法块何时启动和何时结束,然后检查其中是否包含try catch。