我想简化跨多个项目和团队的代码分析和相关规则。
我们过去通过使用 NuGet 包将分析器导入项目(Microsoft.CodeAnalysis.FxCopAnalyzers 和 StyleCop.Analyzers)并定义一个规则集来定义 VS 如何处理每个规则(错误、警告等)来做到这一点。
我一直在尝试使用通用的 .editorconfig 文件而不是规则集来设置它。问题是,当从共享文件夹导入 .editorconfig 文件时,似乎会忽略如下设置。
dotnet_diagnostic.CA1062.severity = error
为了对此进行测试,我有一个非常简单的场景来说明问题。
.editorconfig 文件如下:
[*.cs]
dotnet_diagnostic.CA1062.severity = error
#dotnet_code_quality.null_check_validation_methods = NotNull
现在这个文件被导入到一个 csproj 中,如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<Import Project="..\..\_Shared\Build.props" />
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.4">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>
Build.props 是这样的:
<Project>
<PropertyGroup>
<SkipDefaultEditorConfigAsAdditionalFile>true</SkipDefaultEditorConfigAsAdditionalFile>
</PropertyGroup>
<ItemGroup Condition="Exists('$(MSBuildThisFileDirectory)\.editorconfig')" >
<AdditionalFiles Include="$(MSBuildThisFileDirectory)\.editorconfig" />
</ItemGroup>
</Project>
以下代码应该在 CA1062 上触发错误:
public int Calculate(InputData input)
{
SmartGuard.NotNull(nameof(input), input);
if (this.Multiply)
{
return input.Value * 2;
}
else
{
return input.Value + 2;
}
}
但结果是一个警告:
现在,如果我更改 .editorconfig 并取消注释第二行:
[*.cs]
dotnet_diagnostic.CA1062.severity = error
dotnet_code_quality.null_check_validation_methods = NotNull
错误发生了,这意味着null_check_validation_methods
正在考虑中。
为什么会dotnet_diagnostic.CA1062.severity = error
被忽略?