2015-01-26 39 views
0

如果项目包含代码进行反射,是否可以使VS2013 csc或msbuild生成警告或错误?限制反射

这意味着对我们自己的开发人员的不良做法(例如没有工作经验的毕业生或只是防御不应该被提交的调试代码的防御)的防御性限制。

+0

静态代码分析规则是否足够? – BradleyDotNET 2015-01-26 23:52:44

+0

我不知道你可以写这些,我会看看它,谢谢:) – Mirek 2015-01-27 14:08:31

回答

0

我不相信全面禁止反思。

但是,您可以使用自定义任务来实现该目标,但这很难实现,因为它必须通过源代码来查找使用反射的位置并发出警告。

http://blogs.msdn.com/b/msbuild/archive/2006/01/21/515834.aspx

工具一样的FxCop,或声纳也许能帮助您自定义的规则来分析代码。

1

您可以简单地在所有源文件中为System.Reflection添加grepping(Windows上的findstr)前/后构建步骤。他们要么必须将其放入使用声明中,要么完全限定代码使用情况,以便能够捕获这两种情况。当然,如果你的代码中有合法的System.Reflection用法,它可能会标记出许多误报。棘手的部分是反转findstr的返回值(如果找不到字符串,通常会返回1)。试试这个: findstr /s /L "System.Reflection" *.cs && echo Error: using System.Reflection is not allowed. && set ERRORLEVEL=1 || set ERRORLEVEL=0你可以添加更多的通配符和/或根据需要使它们更具体。

+0

你可以做一个相当大数量的反射,而不包括反射命名空间。另外,“动态”无异于反思。 – 2015-01-27 00:36:54

+0

是的。我的想法会错过'var foo = bar.GetType()。Assembly'这是非常基本的反射。捕捉这将需要相当复杂的规则。 – 2015-01-27 17:09:45