编码风格,每一个人都是有不一样的特色,风格各异,并且一我的在不一样的时期,编码风格的差别也多是很是大的,比如学生时代,刚工做的时候,工做一段时间后等。html
在一个团队中,或一个项目中,若是出现了N种风格,这个可能就是比较头疼了,尤为是风格差别很大的时候。git
一个项目一种风格或许还能够接受,若是一个项目风格都不同,那就有点难受了,就更不用说整个团队的了。长久来看,团队之间,不免会有人员的调动,因此统一整个团队的编码风格仍是颇有必要的。github
统一了编码风格会带来什么好处呢?下面列出几点json
下面来先看看本文的重点StyleCop。ide
这里引用维基百科的介绍工具
StyleCop is an open-source static code analysis tool from Microsoft that checks C# code for conformance to StyleCop's recommended coding styles and a subset of Microsoft's .NET Framework Design Guidelines. StyleCop analyses the source code, allowing it to enforce a different set of rules from FxCop (which, instead of source code, checks .NET managed code assemblies). The rules are classified into the following categories:ui
- Documentation
- Layout
- Maintainability
- Naming
- Ordering
- Readability
- Spacing
简单理解,开源的静态代码分析工具,用来检查代码是否符合推荐的编码风格。编码
它的开源地址: https://github.com/StyleCop/StyleCopspa
其在README的最后,建议咱们(使用Visual Studio 2015或更高版本的开发人员)使用的是StyleCopAnalyzers。3d
因此,后面咱们用到的是它,StyleCop规则基于.NET编译器(Roslyn)的实现。
下面经过一个示例来介绍它的简单使用。
当咱们新建一个.NET Core的控制台程序以后,大体就是下面的样子。能够看到是没有任何警告的。
经过Nuget安装StyleCop.Analyzers,或直接在csproj里面加下面的内容。
<ItemGroup> <PackageReference Include="StyleCop.Analyzers" Version="1.1.1-rc.94"> <PrivateAssets>All</PrivateAssets> </PackageReference> </ItemGroup>
在回到Program.cs
,立刻就能够看到有波浪线了~~
这个时候咱们须要狠一点,把项目的全部警告级别的提示都当成错误来看待。
<PropertyGroup> <!-- other... --> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> </PropertyGroup>
加了这个以后,编译就立马出错了。
在编译不经过时,仍是ERROR级别的错,只能乖乖的去改了。
按照提示,一个个修改以后,仍是有一个SA0001
的错误提示。
要修复这个问题,须要参考这个文档 SA0001.md
启用一下生成XML文档,同时加几个禁止显示的警告便可。
<PropertyGroup> <!-- other... --> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> <!-- 加下面2行,处理SA0001 --> <GenerateDocumentationFile>true</GenerateDocumentationFile> <NoWarn>$(NoWarn),1573,1591,1712</NoWarn> </PropertyGroup>
这个时候再build,就不会有错误了。
对于这么简单的一个空项目,都有很多要修改的地方,就能够知道,默认的规则是比较严格的。那么咱们有没有办法避免应用某些规则呢?答案是确定的。
咱们能够经过添加代码分析规则集
来自定义。
有两个方式添加,一个是直接添加新建项;一个是经过修改分析器里面的规则集严重性,修改后会自动生成。
下面咱们经过修改两个规则来体验一下。
一个是不想要上面的头部(SA1200),一个是using能够在命名空间外面(SA1633)。
下面是示例代码。
<?xml version="1.0" encoding="utf-8"?> <RuleSet Name="Demo Analyzer Rules" Description="Analyzer rules for Demo." ToolsVersion="15.0"> <Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers"> <!-- Using statements must be inside a namespace --> <Rule Id="SA1200" Action="None" /> <!-- The file header is missing or not located at the top of the file --> <Rule Id="SA1633" Action="None" /> </Rules> </RuleSet>
同时,还要修改csproj文件
<PropertyGroup> <!-- other... --> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> <!-- 加下面2行,处理SA0001 --> <GenerateDocumentationFile>true</GenerateDocumentationFile> <NoWarn>$(NoWarn),1573,1591,1712</NoWarn> <!-- 加下面这行,自定义代码分析规则集 --> <CodeAnalysisRuleSet>..\test.ruleset</CodeAnalysisRuleSet> </PropertyGroup>
去掉代码的头部,和把using放到外面,再build一下项目,就能够正常经过了。
既然能够本身定义,那么就必然有这样一个问题,每一个人可能都会想把本身的习惯放开,这样的话,这个规则就是一个透明的存在了!!
换句话说,必需要有一些硬性规定,必需要有一些取舍。咱们能够向某些开源项目借鉴,同时在他的基础上作简单的添加删除,我的以为应该能够适应大多数的状况了。
下面放出几个以为不错的参考。
在代码分析规则集的基础上,还能够用Stylecop.json
来微调某些规则的行为。
当把SA1633
恢复以后,提示的第二个选项就是添加Stylecop.json
配置文件
添加以后,还要在csproj里面作设置
<ItemGroup> <AdditionalFiles Include="stylecop.json" /> </ItemGroup>
关于Stylecop.json
的具体配置,能够参考Configuring StyleCop Analyzers,这里不继续展开。
除了上面的办法,还能够经过安装扩展StyleCop来处理。
安装后,右击项目的时候就能够看到StyleCop相关的菜单。
在团队内保持同样的编码风格,并能在开发过程当中纠正相应的错误,这是编写可维护和可读代码的重要一步,一样也是代码审查的重要一步!
固然,在团队内推行这类规范,仍是要多多听取团队成员的意见,也要定时检查规则是否须要更新,毕竟时代在进步!只要达成一致,就是好规则,就应该要遵照。
StyleCop是一个很不错的工具,用的好就是利器。能够把它和cli模板项目相结合,这样建立的新项目就都“内嵌”了同样的规则了。
友情提示,在老项目添加这个要慎重,否则会有一阵阵酸爽。