在Visual Studio 2010 C#项目中,如何在没有try-catch块的情况下编写任何方法?
有时作为代码审阅者,很难搜索根据代码标准没有正确编写的函数/方法,例如:没有try-catch块。
我知道Visual Studio中的 Find 选项支持正则表达式。但是,能够巧妙地完成这项工作的正则表达式是什么?
答案 0 :(得分:6)
编辑(首先直接回答):实际上很容易使用Assembly.ReflectionOnlyLoadFrom,然后枚举types和methods类型,然后为每个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。