在 Visual Studio 2019 Preview 4 中使用通用 .editorconfig 文件(在 csproj 中导入)的问题

Hug*_*iro 5 roslyn editorconfig visual-studio-2019

我想简化跨多个项目和团队的代码分析和各自的规则。

我们过去常常通过将分析器导入项目(Microsoft.CodeAnalysis.FxCopAnalyzers 和 StyleCop.Analyzers)的 NuGet 包来实现这一点,并定义了一个规则集来定义 VS 如何处理每个规则(错误、警告等)。

我一直在尝试使用通用的 .editorconfig 文件而不是规则集来设置它。问题是当 .editorconfig 文件从共享文件夹导入时,类似以下的设置似乎被忽略了。

dotnet_diagnostic.CA1062.severity = error
Run Code Online (Sandbox Code Playgroud)

为了对此进行测试,我有一个非常简单的场景来说明问题。

.editorconfig 文件如下:

[*.cs]
dotnet_diagnostic.CA1062.severity = error
#dotnet_code_quality.null_check_validation_methods = NotNull
Run Code Online (Sandbox Code Playgroud)

现在这个文件被导入到一个 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>
Run Code Online (Sandbox Code Playgroud)

Build.props 是这样的:

<Project>
    <PropertyGroup>
    <SkipDefaultEditorConfigAsAdditionalFile>true</SkipDefaultEditorConfigAsAdditionalFile>
    </PropertyGroup>
    <ItemGroup Condition="Exists('$(MSBuildThisFileDirectory)\.editorconfig')" >
        <AdditionalFiles Include="$(MSBuildThisFileDirectory)\.editorconfig" />
    </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

以下代码应该会在 CA1062 上触发错误:

public int Calculate(InputData input)
{
    SmartGuard.NotNull(nameof(input), input);
    if (this.Multiply)
    {
        return input.Value * 2;
    }
    else
    {
        return input.Value + 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

但结果是一个警告:

错误列表

现在,如果我更改 .editorconfig 并取消注释第二行:

[*.cs]
dotnet_diagnostic.CA1062.severity = error
dotnet_code_quality.null_check_validation_methods = NotNull
Run Code Online (Sandbox Code Playgroud)

错误继续,这意味着null_check_validation_methods正在考虑。

为什么会dotnet_diagnostic.CA1062.severity = error被忽略?

Hug*_*iro 2

以下问题报告了 .editorconfig 机制的这个问题和其他问题:

通过实施这些问题中引用的建议,这些问题已经得到解决,原始问题也得到了解答。