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

时间:2012-07-04 16:37:07

标签: c# regex visual-studio-2010 visual-studio code-standards

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

有时作为代码审阅者,很难搜索根据代码标准没有正确编写的函数/方法,例如:没有try-catch块。

我知道Visual Studio中的 Find 选项支持正则表达式。但是,能够巧妙地完成这项工作的正则表达式是什么?

3 个答案:

答案 0 :(得分:6)

编辑(首先直接回答):实际上很容易使用Assembly.ReflectionOnlyLoadFrom,然后枚举typesmethods类型,然后为每个method body检查ExceptionHandlingClauses

评论如下:

Red Gate过去常常提供Exception Hunter工具来追踪可能的异常问题。正如该页面所述,已经证明,即使在自动分析工具的帮助下,您请求的特定任务(广泛搜索任何未处理的异常)也不会产生更高质量的软件。

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

答案 1 :(得分:1)

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

通常这会搜索整个解决方案,但您可以将其范围扩展到特定的代码段。您可以轻松地使用它来查找所有代码,例如,使用一次性对象。然后,如果在任何地方都使用using语句,你可以解决。

可以使用相同的机制来检查try / catch块中是否使用了某段代码。

以下是一些MSDN documentation

答案 2 :(得分:0)

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

我不建议您使用Regex来做到这一点。您必须编写一个非常复杂的脚本,该脚本将是一个状态机,它基于方法块何时启动以及何时完成,然后检查是否有try-catches。