项目管理:在VS编译过程中实现自定义错误

时间:2010-05-30 17:29:59

标签: c# .net compiler-errors enforcement

再次:如果您的投票结果为-1,请发表评论解释原因。这篇文章不是关于你是否批准这种方法,而是如何去做。

与许多建筑师一样,我通过多年的经验开发出编码标准,我希望开发人员能够遵循这些标准。

对于认为有三到四年经验使您成为高级开发人员的人群而言,这尤其成为一个问题。将此作为培训和代码审查问题进行处理已经取得了有限的成功。

所以,我认为能够在构建过程中添加自定义编译时错误以更严格地执行我们的内部最佳实践和编码标准会很棒。

例如,我们使用存储过程进行所有数据库访问,它提供了过程级安全性,数据库封装(表结构对应用程序是隐藏的)以及其他好处。 (注意:我对开始讨论这个问题感兴趣。)一些开发人员更喜欢内联SQL或参数化查询,这很好 - 他们自己的时间和自己的项目。

我想要一种添加编译检查的方法,例如找到任何类似

的内容
string sql = "insert into some_table (col1,col2) values (@col1, @col2);"

并生成错误,或者在某些情况下会生成警告,并显示

之类的消息

Inline SQL and parametrized queries are not permitted.

或者,如果他们使用var关键字

var x = new MyClass();

Variable definitions must be explicitly typed.

Visual Studio和MSBuild是否提供了添加此功能的方法?我认为我可以使用正则表达式来查找不可接受的代码并生成正确的错误,但从性能的角度来看,我不确定将其集成到构建过程中的最佳方法。

我们可以添加一个构建前或构建后的步骤来运行自定义EXE,但是如何返回行和文件特定的错误?另外,我希望在编译每个文件后运行,而不是后链接。

正则表达式是执行此类模式匹配的最佳方式,还是应该疯狂并通过C#解析器运行代码,这将允许通过解析树进行节点级验证?

我很欣赏先前经验的建议和故事。

评论 一些受访者指出,可以限制用户通过数据库权限运行除存储过程之外的任何操作的能力。但是,我们正在将一个350k +行应用程序从ASP 3.0移植到ASP.NET MVC,而现有的代码库在很大程度上依赖于连接的SQL,而新的东西都使用Enterprise Library。我想我可以为.NET代码添加一个单独的Web用户帐户,具有更严格的权限。

4 个答案:

答案 0 :(得分:1)

为Resharper编写插件怎么样?以下是一个教程:Writing plug-ins for ReSharper: Part 1 of Undefined

答案 1 :(得分:1)

对于编码标准,我会考虑为FxCop或StyleCop编写自定义规则。我认为Regex不适合这项工作。

对于要求存储过程的特定情况 - 如果您确保应用程序无权在生产数据库上执行任何其他操作,则每个人都很快就会排成一行。

答案 2 :(得分:1)

隐式输入(var x = ....)是一个可以在Visual Studio的项目级别关闭的功能。

另一个比较棘手。您是否看过FxCop,它是执行代码标准的工具。

答案 3 :(得分:0)

应该通过数据库权限管理只能使用存储过程的要求。反对使用var的规则对我来说似乎是相当武断的,我想不出一种强制执行它的方法。您还有更多关于最佳实践的例子吗?