在实际项目开发中,越是复杂的项目,越是需要很多人协同完成,每一个人根据职责分工不同,负责不同的模块。在这个过程中,由于每一个人的工作经历不同,在不同的职场环境中,会形成不同的编码习惯,比如有人喜欢驼峰命名方式,有人喜欢帕斯卡命名方式,还有人喜欢用下划线分隔单词,更有甚者,有的人喜欢随意命名,那在整个项目中如何保持一种编码风格,让每一个人都能快速的看懂其他同事的代码,就显得非常关键。要解决这一个问题,最直接的方法就是代码审查(Code Review),同事之间相互审查对方的代码,以便及时更正,但这也有弊端,比如在项目工期较紧的时候,人工代码审查就会流于形式;同时大家的编程习惯各不相同,也难于形成统一认识。这时候如果能有一款工具,在编程的时候,及时标识出不规范的地方,那将会大大的节约大家的时间,同时也容易形成统一认识,按照既定的规则进行编程。今天我们就以一个简单的小例子,简述如何通过StyleCop.Analyzers实现代码的静态审查,仅供学习分享使用,如有不足之处,还请指正。
什么是StyleCop.Analyzers?
安装
分析器和代码提示
StyleCop规则说明
-
文档规则:主要包括文档的定义相关规则,如文档说明,接口说明,类说明,属性说明等内容。 -
缩进规则:主要是采用哪种方式缩进,如tab缩进,空格缩进。 -
间距规则:主要定义间距。 -
可读性规则:主要定义代码可读性,如给内置类型设置别名等。 -
排序规则:主要定义文档中元素之间的排序,如属性,方法等排序规则。 -
命名规则:主要定义命名规则方式。 -
可维护性规则:主要定义哪些类型需要定义在单独的文件中,如一个类文件只能包含一个类定义。 -
布局规则:主要定义代码布局,如do-while的闭合花括号和条件表达式在同一行。

StyleCop规则配置
{// ACTION REQUIRED: This file was automatically added to your project, but it// will not take effect until additional steps are taken to enable it. See the// following page for additional information://// https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/EnableConfiguration.md"$schema": "https://raw./DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json","settings": {//文档规则"documentationRules": {"companyName": "Okcoder", //指定应在版权声明中出现的公司名称"copyrightText": "Copyright (c) { companyName }. All rights reserved.","xmlHeader": true,"variables": {"licenseName": "MIT","licenseFile": "LICENSE"},"headerDecoration": "-----------------------------------------------------------------------","documentInterfaces": true,"documentExposedElements": true,"documentInternalElements": true,"documentPrivateElements": false,"documentPrivateFields": false,"fileNamingConvention": "stylecop","documentationCulture": "en-US","excludeFromPunctuationCheck": ["seeaslo"]},//缩进规则"indentation": {"useTabs": false,"tabSize": 4,"indentationSize": 4},//间距规则"spacingRules": {},//可读性规则"readabilityRules": {//是否运行给内置类型定义别名"allowBuiltInTypeAliases": false},//排序规则"orderingRules": {//定义文档中元素排序和优先级 traits:特性"elementOrder": [ "kind", "accessibility", "constant", "static", "readonly" ],"systemUsingDirectivesFirst": true,"usingDirectivesPlacement": "outsideNamespace","blankLinesBetweenUsingGroups": "allow"},//命名规则"namingRules": {//允许使用常见的匈牙利语前缀"allowCommonHungarianPrefixes": true,"allowedHungarianPrefixes": [ "cd", "md" ],"allowedNamespaceComponents": [ "" ],"includeInferredTupleElementNames": false, //是否需要触发推断出的元组名进行分析"tupleElementNameCasing": "PascalCase" // 元组命名方式,Pascal方式},//可维护性规则"maintainabilityRules": {//定义哪些类型需要在单独的文件中"topLevelTypes": [ "class", "interface", "enum", "delegate", "struct" ]},"layoutRules": {"allowConsecutiveUsings": true, //允许使用连续无花括号的语句"allowDoWhileOnClosingBrace": false, //是否允许do while 的条件表达式和闭合括号在同一行"newlineAtEndOfFile": "allow" // 文件结尾是否允许出现新行标识符}}}
配置规则共享
<ItemGroup><AdditionalFiles Include="..stylecop.json" Link="stylecop.json" /></ItemGroup>
学习编程,从关注【老码识途】开始,为大家分享更多文章!!!