蓝冰葫芦 發表於 2025-8-28 12:00:00

推荐一款代码规范检查(CodeReview)神器

<p>在实际项目开发中,越是复杂的项目,越是需要很多人协同完成,每一个人根据职责分工不同,负责不同的模块。在这个过程中,由于每一个人的工作经历不同,在不同的职场环境中,会形成不同的编码习惯,比如有人喜欢驼峰命名方式,有人喜欢帕斯卡命名方式,还有人喜欢用下划线分隔单词,更有甚者,有的人喜欢随意命名,那在整个项目中如何保持一种编码风格,让每一个人都能快速的看懂其他同事的代码,就显得非常关键。要解决这一个问题,最直接的方法就是代码审查(Code Review),同事之间相互审查对方的代码,以便及时更正,但这也有弊端,比如在项目工期较紧的时候,人工代码审查就会流于形式;同时大家的编程习惯各不相同,也难于形成统一认识。这时候如果能有一款工具,在编程的时候,及时标识出不规范的地方,那将会大大的节约大家的时间,同时也容易形成统一认识,按照既定的规则进行编程。今天我们就以一个简单的小例子,简述如何通过StyleCop.Analyzers实现代码的静态审查,仅供学习分享使用,如有不足之处,还请指正。</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250828000733738-1815481792.png"></p>
<p>&nbsp;</p>
<h1>什么是StyleCop.Analyzers?</h1>
<p>&nbsp;</p>
<p>StyleCop.Analyzes是一个C#源码分析工具,用于检测代码样式、质量和可维护性、设计及其他问题。它目前已经包含了200多个最佳实践规则,可以帮助我们更容易的进行代码审查。而且这些实践规则,和&nbsp;Visual Studio 中默认的代码格式化规则是一致的。它会根据预定义的C#代码格式的最佳实践,对我们的源代码进行检查,并给出不符合编码风格的错误提示。可以帮助团队成员强制执行一组代码样式和一致性规则。</p>
<p>github网址为:https://github.com/DotNetAnalyzers/StyleCopAnalyzers/</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250818220126841-1699990146.png"></p>
<p>&nbsp;</p>
<h1>StyleCop安装</h1>
<p>&nbsp;</p>
<p>在Visual Studio 2022开发工具中,可以通过Nuget包管理器进行安装。首先创建示例项目Okcoder.StyleCopAnalyzers.Demo解决方案,它包含两个项目,分别为WinForm程序Okcoder.StyleCopAnalyzers.Demo和类库Okcoder.StyleCopAnalyzers.Test。创建成功后,如下图所示:</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250826232443760-156133299.png"></p>
<p>&nbsp;</p>
<p>在项目右键,选择“管理 Nuget程序包...”打开Nuget包管理页面,然后在“浏览”输入“StyleCop.Analyzers”关键字进行搜索。当前最新版本为v1.1.118,如下所示:</p>
<p><br><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250826231542298-2038208705.png"></p>
<p>&nbsp;</p>
<p>可以根据实际情况进行安装,如果有些项目不需要进行代码静态审查,则不需要安装。</p>
<p>&nbsp;</p>
<h1>分析器和代码提示</h1>
<p>&nbsp;</p>
<p>StyleCop.Analyzers安装成功后,打开项目Okcoder.StyleCopAnalyzers.Demo的“依赖项”,并在子项中选择“分析器”中,可以看到StyleCop.Analyzers的内容,它主要包含代码静态审查的规则和严重程度设置。如下所示:</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250826232718322-913241935.png"></p>
<p>&nbsp;</p>
<p>这个时候,当我们打开FrmMain页面,可以看到多了很多绿色的波浪线,这是在提示我们它不符合StyleCop.Analyzers的代码审查规则,当鼠标放在绿色波浪线的上方,会提示具体的详细内容,如下所示:</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250826233352041-1474061837.png"></p>
<p>&nbsp;</p>
<p>当我们按照StyleCop.Analyzer提示的规则修改后,绿色波浪线会消失,如下所示:</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250826234246351-743432460.png"></p>
<p>同时经过修改,代码也变得清爽很多。</p>
<p>&nbsp;</p>
<h1>StyleCop规则说明</h1>
<p>&nbsp;</p>
<p>StyleCop.Analyzers定义了很多规则,但我们并不需要应用全部的规则,可以根据项目实际需要应用部分规则,它主要定义的规则如下所示:</p>
<ol>
<li>文档规则:主要包括文档的定义相关规则,如文档说明,接口说明,类说明,属性说明等内容。</li>
<li>缩进规则:主要是采用哪种方式缩进,如tab缩进,空格缩进。</li>
<li>间距规则:主要定义间距。</li>
<li>可读性规则:主要定义代码可读性,如给内置类型设置别名等。</li>
<li>排序规则:主要定义文档中元素之间的排序,如属性,方法等排序规则。</li>
<li>命名规则:主要定义命名规则方式。</li>
<li>可维护性规则:主要定义哪些类型需要定义在单独的文件中,如一个类文件只能包含一个类定义。</li>
<li>布局规则:主要定义代码布局,如do-while的闭合花括号和条件表达式在同一行。</li>
</ol>
<p>以上是StyleCop.Analyzers定义的主要规则,每一项还包含更详细的规则,具体可以在实际应用中进行查看。</p>
<p>&nbsp;</p>
<h1>StyleCop规则配置</h1>
<p>&nbsp;</p>
<p>StyleCop.Analyzers提供了两种规则配置方式,本文主要通过stylecop.json文件进行配置,关于stylecop.json的创建,可以通过在代码警告提示的地方,点击“快速操作和重构”小灯泡按钮,然后点击“Add StyleCop settings file to the project”就可以在项目中添加stylecop.json配置文件,如下所示:</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250826235902052-256429682.png"></p>
<p>&nbsp;</p>
<p>配置完成后,stylecop.json的示例文件如下所示:</p>
<p>&nbsp;</p>
<pre class="language-json highlighter-hljs"><code>{
// 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.githubusercontent.com/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" // 文件结尾是否允许出现新行标识符
    }
}
}</code></pre>
<p>&nbsp;</p>
<h1>配置规则共享</h1>
<p>&nbsp;</p>
<p>在实际应用中,我们不止有一个项目,如果需要在多个项目中应用同一套代码审查规则,可以将stylecop.json文件复制到公共目录,如解决方案文件夹,如下所示:</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250827234212196-1634948488.png"></p>
<p>&nbsp;</p>
<p>在需要添加的项目中,右键编辑项目文件,然后在项目文件中添加如下代码,将共享规则文件链接到项目中,如下所示:</p>
<p>&nbsp;</p>
<pre class="language-xml highlighter-hljs"><code>&lt;ItemGroup&gt;
    &lt;AdditionalFiles Include="..\stylecop.json" Link="stylecop.json" /&gt;
&lt;/ItemGroup&gt;</code></pre>
<p>&nbsp;</p>
<p>添加后项目文件如下所示:</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250827234746076-816348747.png"></p>
<p>&nbsp;</p>
<p>并且在一个地方修改stylecop.json文件,会同时生效,因为两个项目都是链接的同一个json文件。在项目中如下所示:</p>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202508/1068941-20250827234841376-1332423293.png"></p>
<p>以上就是《推荐一款代码规范检查(CodeReview)神器》的全部内容,旨在抛砖引玉,一起学习,共同进步!</p>

</div>
<div id="MySignature" role="contentinfo">
    <div id="AllanboltSignature">

    <p style="border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed; border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 30px; font-family: 微软雅黑; font-size: 12px" id="PSignature">
<br>

   <img alt="" src="https://images.cnblogs.com/cnblogs_com/hsiang/1154298/o_115f1cd8.jpg" width="80px" height="80px">
   
    作者:老码识途
    <br>
    出处:http://www.cnblogs.com/hsiang/
    <br>
    本文版权归作者和博客园共有,写文不易,支持原创,欢迎转载【点赞】,转载请保留此段声明,且在文章页面明显位置给出原文连接,谢谢。
    <br>关注个人公众号,定时同步更新技术及职场文章
<br><br>
   </p>
</div><br><br>
来源:https://www.cnblogs.com/hsiang/p/19045599
頁: [1]
查看完整版本: 推荐一款代码规范检查(CodeReview)神器