Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 项目管理:在VS编译过程中实现自定义错误_C#_.net_Compiler Errors_Enforcement - Fatal编程技术网

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

C# 项目管理:在VS编译过程中实现自定义错误,c#,.net,compiler-errors,enforcement,C#,.net,Compiler Errors,Enforcement,再次:如果你投-1票,请留下评论解释原因。这篇文章不是关于你是否同意这种方法,而是关于如何去做。 像许多架构师一样,我通过多年的经验开发了编码标准,我希望我的开发人员能够遵守这些标准 这对于相信三四年的经验会让你成为一名高级开发人员的人来说尤其是一个问题。将此作为培训和代码审查问题来处理,取得的成功有限 因此,我认为能够在构建过程中添加自定义编译时错误以更严格地执行我们的内部最佳实践和编码标准将是一件好事 例如,我们对所有数据库访问都使用存储过程,这提供了过程级安全性、db封装(表结构对应用程序

再次:如果你投-1票,请留下评论解释原因。这篇文章不是关于你是否同意这种方法,而是关于如何去做。

像许多架构师一样,我通过多年的经验开发了编码标准,我希望我的开发人员能够遵守这些标准

这对于相信三四年的经验会让你成为一名高级开发人员的人来说尤其是一个问题。将此作为培训和代码审查问题来处理,取得的成功有限

因此,我认为能够在构建过程中添加自定义编译时错误以更严格地执行我们的内部最佳实践和编码标准将是一件好事

例如,我们对所有数据库访问都使用存储过程,这提供了过程级安全性、db封装(表结构对应用程序隐藏)和其他好处。(注意:我不想就此展开争论。)一些开发人员更喜欢内联SQL或参数化查询,这很好-在他们自己的时间和项目上

我想要一种添加编译检查的方法,该检查可以查找(比如)任何看起来像

string sql = "insert into some_table (col1,col2) values (@col1, @col2);"
并生成一个错误,或者在某些情况下,生成一个警告,并显示如下消息

不允许内联SQL和参数化查询。

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

var x = new MyClass();
变量定义必须显式键入。

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

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

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

我希望你能给我一些建议和以前的经历

评论
一些受访者指出,可以通过db权限限制用户运行存储过程以外的任何操作。然而,我们正在将一个350k+行的应用程序从ASP 3.0移植到ASP.NET MVC,现有的代码库非常依赖串联SQL,而新的东西都使用企业库。我想我可以为.NET代码添加一个具有更严格权限的单独web用户帐户。

为Resharper编写一个插件怎么样?这里有一个教程开始:

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

对于需要存储过程的特定情况,如果您确保应用程序没有在生产数据库上执行任何其他操作的权限,那么每个人都会很快加入进来。

隐式键入(
var x=…
)是可以在visual studio的项目级别上关闭的功能


另一个更棘手。您看过FxCop了吗?它是一种用于强制执行代码标准的工具。

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

+1用于DB权限建议,但即使仅限制对存储过程的访问,也仍然允许创建连接SQL,例如“exec my_storage_proc'”+val1+“,“+val2+”,这不太理想。另外,我可以强制运行StyleCop或FxCop吗?我想我可以在源代码管理服务器上完成。嗯,“我想我可以在源代码管理服务器上完成”——这可能是最好的方法,你可能不想在每个构建中都受到代码分析的性能损失。我认为有可能创建一个FxCop规则,该规则将CommandType设置为CommandType.StoredProcedure以外的任何值来标记调用ADO.NET方法的尝试。