如何运行的代码分析.NET应用程序.代码分析.命令行界面中的NetAnalyzers



设置:

  1. 。NET Core 3.1控制台应用程序
  2. 微软。代码分析。作为NuGet包安装的NetAnalyzers

问题:
我需要从命令行界面运行代码分析,以便将其作为CI(持续集成)构建过程中的一个步骤。

理想情况下,在构建TypeScript应用程序并将所有问题输出到控制台之前,我希望运行类似于ESLint或TSLint的程序,在出现代码分析问题时,不要让构建过程继续下去。

感谢您的帮助!

。NET分析器在构建上运行。

默认情况下,仅启用某些规则:请参阅代码质量分析:启用的规则。若要启用所有规则,您可以在.csproj中设置<AnalysisMode>AllEnabledByDefault</AnalysisMode>,或者在项目目录或更高版本中设置一个Directory.Build.props文件。

大多数诊断都报告了严重性Warning,因此它们不会破坏您的构建。但是MSBuild也有TreatWarningsAsErrors选项。我建议在Release构建中只使用TreatWarningsAsErrors(或非Debug版本,取决于您的偏好),这样您就可以在编码时执行快速原型设计,并促进令人满意的TDD循环,而无需担心开发过程中立即出现的每一个警告。但是,当您将CI设置为使用ReleaseConfiguration构建时,如果存在任何警告(现在被视为错误),则管道将停止并失败。

示例:

.csproj

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="5.0.3" PrivateAssets="all" />
</ItemGroup>
</Project>

CLI

dotnet build --configuration Release

如果存在任何Warnings,则在发布配置中将它们视为Errors,并且dotnet build将以非零退出代码终止,从而使CI管道失败。

我已经使用测试了这个例子。NET 5.0 SDK

请记住,这与有关。NET 5.0 SDK及更高版本,Microsoft.CodeAnalysis.NetAnalyzers包含在SDK中,可以通过<EnableNETAnalyzers>true</EnableNETAnalyzers>启用。不过,如果您更喜欢基于NuGet包的模型进行按需版本更新,则不应添加EnableNETAnalyzers属性。还要记住。NET 6.0 SDK提供了更细粒度的AnalysisMode:请参阅MSBuild:AnalysisMode。

如果您不关心分析器中的每个诊断,并且希望覆盖特定规则的默认严重性,则可以将全局分析器配置(.globalconfig)文件添加到您的项目目录或更高版本中,以配置分析器。

.globalconfig(分析仪配置)

is_global = true
# CA1062: Validate arguments of public methods
dotnet_diagnostic.CA1062.severity = silent
# CA1707: Identifiers should not contain underscores
dotnet_diagnostic.CA1707.severity = silent
# CA2007: Consider calling ConfigureAwait on the awaited task
dotnet_diagnostic.CA2007.severity = silent

这个例子取自我的一个单元测试项目,在那里我不想验证我的参数化单元测试方法,在我的单元测试方法名称中使用下划线,并且我不关心ConfigureAwait

使用AnalyzerConfig文件,可以控制每个规则的严重性,并强制其为defaultnonesilentsuggestionwarningerror。请参阅规则特定选项:严重性级别。

某些规则提供了额外的配置选项。例如,CA2007只能通过应用于产生特定OutputType的代码,例如.dll

dotnet_code_quality.CA2007.output_kind = DynamicallyLinkedLibrary

我不知道该在哪里停下来。让我知道这是否回答了你的问题,或者我是否应该提供更多细节。这是关于该主题的官方文档的链接(非常全面):代码分析:概述。NET源代码分析。

记住,罗斯林太棒了!

相关内容

  • 没有找到相关文章

最新更新