我们的团队使用自定义规则集的代码分析功能,如果我们忘记对方法参数进行空检查,就会导致构建失败。
但是,现在,当我们创建一个新的.NET Core项目时,它看起来并不像Code Analysis这些新项目的功能。 “项目属性”区域中没有用户界面,向项目as recommended here添加自定义规则集只会影响StyleCop分析器(SAxxxx
规则)。
有没有办法在.NET Core项目中启用代码分析(CAxxxx
)规则?
答案 0 :(得分:29)
显然,正确的方法是安装Microsoft.CodeAnalysis.FxCopAnalyzers NuGet包。即使在ASP.NET Core项目中,这也很有用,并且根本不需要<RunCodeAnalysis>
标志。
我意识到csproj文件中还有另一个标签,它实际上是启用代码分析。我的.csproj文件中的<PropertyGroup>
标记现在看起来像这样:
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
<CodeAnalysisRuleSet>..\MyCompanyCodeAnalysisRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
</PropertyGroup>
它的效果很好,至少在普通项目上是这样。 ASP.NET Core项目产生以下错误:
CA0055 : Could not identify platform for 'C:\Source\...\bin\Debug\netcoreapp1.1\....dll'.
CA0052 : No targets were selected.
答案 1 :(得分:2)
通常,您唯一需要做的就是在项目上安装Microsoft.CodeAnalysis.FxCopAnalyzers nuget。
但是正如正确提到的那样,这是行不通的,尤其是对于.Net Core(当前在vs2017中)。
为了同样适用于aspnet核心项目,并解决错误:
“无法识别...的平台”
手动修改项目的csproj文件,并确保不插入RunCodeAnalysis
标签。使PropertyGroup像这样:
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<CodeAnalysisRuleSet>..\MyStylecop.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
此外,如果您需要放置一个给定的规则集文件,请确保将其放置在正确的路径上,如..\MyStylecop.ruleset
所示。 MyStylecop.ruleset是包含规则的文件(实际上是我认为已被禁止的文件-因此它是反逻辑的)。
例如,我的规则集文件是:
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Default stylecop settings" Description="This rule set contains all rules (as warnings), with a few specific supressions." ToolsVersion="15.0">
<IncludeAll Action="Warning" />
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
<Rule Id="CA1004" Action="None" />
<Rule Id="CA1006" Action="None" />
<Rule Id="CA1020" Action="None" />
<Rule Id="CA1025" Action="None" />
<Rule Id="CA1032" Action="None" />
<Rule Id="CA1054" Action="None" />
<Rule Id="CA1055" Action="None" />
<Rule Id="CA1056" Action="None" />
<Rule Id="CA1062" Action="None" />
<Rule Id="CA1300" Action="None" />
<Rule Id="CA1303" Action="None" />
<Rule Id="CA1704" Action="Warning" />
<Rule Id="CA1709" Action="None" />
<Rule Id="CA2007" Action="None" />
<Rule Id="CA2225" Action="None" />
<Rule Id="CA2227" Action="None" />
<Rule Id="CA2233" Action="None" />
<Rule Id="CA2234" Action="None" />
<Rule Id="CA2237" Action="None" />
<Rule Id="CS1591" Action="None" />
<Rule Id="CA1715" Action="None" />
</Rules>
<Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
<Rule Id="SA1101" Action="None" />
<Rule Id="SA1116" Action="None" />
<Rule Id="SA1117" Action="None" />
<Rule Id="SA1118" Action="None" />
<Rule Id="SA1208" Action="None" />
<Rule Id="SA1600" Action="None" />
<Rule Id="SA1601" Action="None" />
<Rule Id="SA1602" Action="None" />
<Rule Id="SA1623" Action="None" />
<Rule Id="SA1633" Action="None" />
<Rule Id="SA1634" Action="None" />
<Rule Id="SA1637" Action="None" />
<Rule Id="SA1640" Action="None" />
<Rule Id="SA1652" Action="None" />
<Rule Id="SA0001" Action="None" />
<Rule Id="SA1314" Action="None" />
</Rules>
</RuleSet>