我如何从命令行界面使用 Microsoft.CodeAnalysis.NetAnalyzers 运行 .NET 应用程序的代码分析
How do I run code analysis for .NET application using Microsoft.CodeAnalysis.NetAnalyzers from a command line interface
设置:
- .NET Core 3.1 控制台应用
- Microsoft.CodeAnalysis.NetAnalyzers 作为 NuGet 包安装
问题:
我需要从命令行界面 运行 进行代码分析,以将其作为我 CI(持续集成)构建过程中的一个步骤。
理想情况下,在构建 TypeScript 应用程序并将所有问题输出到控制台之前,我希望有类似于 ESLint 或 TSLint 运行ning 的东西,并且在代码分析问题的情况下不让构建过程继续进行。
感谢任何帮助!
.NET 分析器 运行 build.
默认情况下,仅启用部分规则:请参阅 Code quality analysis: Enabled rules。要启用所有规则,您可以在 .csproj
中设置 <AnalysisMode>AllEnabledByDefault</AnalysisMode>
或项目目录或更高版本中的 Directory.Build.props
文件。
大多数 诊断 报告为严重性 Warning
,因此它们不会破坏您的构建。但是 MSBuild 也有 TreatWarningsAsErrors
的选项。我建议只在 Release 构建中使用 TreatWarningsAsErrors
(或非 Debug 构建,具体取决于您的偏好),这样您就可以执行在编码的同时快速制作原型并促进令人满意的 TDD 周期,而无需担心在开发过程中立即出现的每一个警告。但是,当您将 CI 设置为使用 Release Configuration 构建时,如果有任何 [=78],您的管道将停止并失败=]警告存在(现在被视为错误)。
示例:
.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
如果存在任何 Warning
,它们在 发布配置 中被视为 Error
,并且 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.
如果您不关心来自分析器的每个 Diagnostic 并且想要覆盖特定规则的默认严重性,您可以添加一个 Global AnalyzerConfig (.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 文件,您可以控制每个规则的严重性并强制其为 default
、none
、silent
、suggestion
、warning
或 error
。参见 Rule-specific options: Severity level。
一些规则提供额外的配置选项。例如。 CA2007 只能应用于产生特定 OutputType
的代码,例如 .dll
,通过:
dotnet_code_quality.CA2007.output_kind = DynamicallyLinkedLibrary
我不确定该停在哪里。让我知道这是否回答了您的问题,或者我是否应该提供更多详细信息。这是关于该主题的官方文档的 link(非常全面):Code analysis: Overview of .NET source code analysis.
请记住,罗斯林很棒!
设置:
- .NET Core 3.1 控制台应用
- Microsoft.CodeAnalysis.NetAnalyzers 作为 NuGet 包安装
问题:
我需要从命令行界面 运行 进行代码分析,以将其作为我 CI(持续集成)构建过程中的一个步骤。
理想情况下,在构建 TypeScript 应用程序并将所有问题输出到控制台之前,我希望有类似于 ESLint 或 TSLint 运行ning 的东西,并且在代码分析问题的情况下不让构建过程继续进行。
感谢任何帮助!
.NET 分析器 运行 build.
默认情况下,仅启用部分规则:请参阅 Code quality analysis: Enabled rules。要启用所有规则,您可以在 .csproj
中设置 <AnalysisMode>AllEnabledByDefault</AnalysisMode>
或项目目录或更高版本中的 Directory.Build.props
文件。
大多数 诊断 报告为严重性 Warning
,因此它们不会破坏您的构建。但是 MSBuild 也有 TreatWarningsAsErrors
的选项。我建议只在 Release 构建中使用 TreatWarningsAsErrors
(或非 Debug 构建,具体取决于您的偏好),这样您就可以执行在编码的同时快速制作原型并促进令人满意的 TDD 周期,而无需担心在开发过程中立即出现的每一个警告。但是,当您将 CI 设置为使用 Release Configuration 构建时,如果有任何 [=78],您的管道将停止并失败=]警告存在(现在被视为错误)。
示例:
.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
如果存在任何 Warning
,它们在 发布配置 中被视为 Error
,并且 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.
如果您不关心来自分析器的每个 Diagnostic 并且想要覆盖特定规则的默认严重性,您可以添加一个 Global AnalyzerConfig (.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 文件,您可以控制每个规则的严重性并强制其为 default
、none
、silent
、suggestion
、warning
或 error
。参见 Rule-specific options: Severity level。
一些规则提供额外的配置选项。例如。 CA2007 只能应用于产生特定 OutputType
的代码,例如 .dll
,通过:
dotnet_code_quality.CA2007.output_kind = DynamicallyLinkedLibrary
我不确定该停在哪里。让我知道这是否回答了您的问题,或者我是否应该提供更多详细信息。这是关于该主题的官方文档的 link(非常全面):Code analysis: Overview of .NET source code analysis.
请记住,罗斯林很棒!