【问题标题】:Problem with using common .editorconfig file (imported in csproj) in Visual Studio 2019 Preview 4在 Visual Studio 2019 Preview 4 中使用通用 .editorconfig 文件(在 csproj 中导入)的问题
【发布时间】:2019-09-20 14:50:11
【问题描述】:

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

我们曾经使用 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 会被忽略?

【问题讨论】:

标签: roslyn visual-studio-2019 editorconfig


【解决方案1】:

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

这些问题已经解决,并且通过实施这些问题中引用的建议来回答原始问题。

【讨论】:

  • 感谢本次更新您的问题及其解决方案!
【解决方案2】:

您遇到的问题来自这样一个事实,即“.editorconfig”文件机制(Visual Studio 或 Microsoft 未定义 - 它是预先存在的标准)基于文件在文件夹结构中的位置。它与 Visual Studio 项目的机制无关。

请参阅here 了解 Microsoft 对此的提及:

当您将 .editorconfig 文件添加到文件层次结构中的文件夹时,其设置将应用于该级别及以下级别的所有适用文件。您还可以覆盖特定项目、代码库或代码库一部分的 EditorConfig 设置,以便它使用与代码库其他部分不同的约定。当您从其他地方合并代码并且不想更改其约定时,这可能很有用。

要覆盖部分或全部 EditorConfig 设置,请在您希望应用这些覆盖设置的文件层次结构级别添加一个 .editorconfig 文件。新的 EditorConfig 文件设置适用于同一级别的文件和任何子目录。

[这里的层次图]

如果您想覆盖部分但不是全部设置,请在 .editorconfig 文件中仅指定这些设置。仅覆盖您在较低级别文件中明确列出的那些属性。更高级别的 .editorconfig 文件中的其他设置将继续应用。如果您想确保没有来自任何更高级别 .editorconfig 文件的设置应用于这部分代码库,请将 root=true 属性添加到较低级别 .editorconfig 文件:

# top-most EditorConfig file
root = true

EditorConfig 文件从上到下读取。如果有多个同名属性,则最近找到的同名属性优先。

here 用于 EditorConfig 项目。

here 用于 EditorConfig 规范:

文件处理

当为 EditorConfig 指定文件名时,将在给定文件的目录和所有父目录中执行 EditorConfig 文件(默认命名为“.editorconfig”)的搜索。不存在的目录被视为存在并且为空。搜索所有找到的 EditorConfig 文件以查找节名与给定文件名匹配的节。如果找到一个 EditorConfig 文件,并且在序言中将根键设置为 true 或到达根文件系统目录时,搜索将停止。

文件从上到下读取,最新发现的规则优先。如果多个 EditorConfig 文件具有匹配的部分,则最后读取较近的 EditorConfig 文件中的规则,因此较近的文件中的对优先。

【讨论】:

【解决方案3】:

我使用 Visual Studio 版本 16.11.2,我的经验是,当您在 Visual Studio 中编辑项目文件时,在您添加指向它的链接作为解决方案项之后,您所描述的问题会以错误的形式出现。在这样的操作之后,StyleCop 不再监听项目的 .editorconfig 文件。

要将 StyleCop 错误重新触发为构建错误,我必须:

  1. 删除项目的 .editorconfig 链接。
  2. 将 .editorconfig 的副本添加到项目中。
  3. 将 .editorconfig 的副本删除到项目中。
  4. 重新添加指向 .editorconfig 的链接。

是的,非常尴尬,但上述确实会触发错误再次显示为构建错误。

此外,在上面的Visual Studio版本中,我需要在.csproj-file中有以下行:

<PropertyGroup>       
   <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

对于以前版本的 Visual Studio,我必须改为使用以下几行:

<PropertyGroup>       
  <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  <WarningsAsErrors></WarningsAsErrors>
</PropertyGroup>

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多