首页 > 解决方案 > 在调试和发布配置之间指定单独的 .editorconfig 文件

问题描述

我正在使用 VS 2019 16.8.3,我想在解决方案 .editorconfig 文件中指定一些代码分析规则(dotnet_diagnostic.CAXXXX.severity),仅用于发布版本。

当我在 .editorconfig 文件中添加规则时,调试构建时间会增加几分钟。项目属性中的所有分析器复选框均未选中“在构建时运行”。

所以我想从代码分析中排除调试构建。是否可以仅为发布版本指定 .editorconfig 文件?

或者是否可以为构建禁用此 .editconfig 并仅适用于手动代码分析?

标签: visual-studiomsbuildvisual-studio-2019editorconfig

解决方案


TLDR

您可以像这样设置.editorconfig文件Directory.Build.props

<Project>
    <ItemGroup Condition="'$(Configuration)'=='Debug'">  
        <EditorConfigFiles Include="xxx\debug.editorconfig" Link=".editorconfig"/>
    </ItemGroup>

    <ItemGroup Condition="'$(Configuration)'=='Release'">
        <EditorConfigFiles Include="xxx\release.editorconfig" Link=".editorconfig"/>
    </ItemGroup>
</Project>

深潜

我们公司也有同样的问题。我们想为调试和发布配置的一个特定规则设置不同的严重性。我们想要这样做的原因是,当开发人员在开发环境中(在他/她的计算机中)收到警告时,拉取请求在 Azure DevOps 环境中的项目或解决方案构建阶段出现错误。

顺便说一句,我们有一个名为CodingGuideline的存储库来存储我们的.editorconfig文件并引用一些分析器,如StyleCop。同时,这个存储库是一个 nuget 包。我们所有的存储库都引用了这个包。

我们有一些解决方案如下:

解决方案 1

  • 我们可以存储.editorconfigreview.editorconfig分离文件。开发人员已经有存储库目录来保存公司存储库,并且每个人都.editorconfig手动放入该目录中。(如果您不想手动放置配置文件,可以尝试解决方案 2)这样,整个存储库将遵循相同的代码样式和编码规则。

  • 如果任何开发人员创建拉取请求,CodingGuideline存储库将自动克隆到构建目录。克隆后,review.editorconfig文件被复制命名为.editorconfig. 而已。当运行 dotnet build 命令并且定义的某些规则review.editorconfig被破坏时,拉取请求将引发错误。

解决方案 2

  • 如果我们不想手动放置配置文件,我们可以通过 nuget 包部署配置文件。在此选项中,我们存储development.editorconfigreview.editorconfig分隔文件。我们不能使用文件名,.editorconfig因为我们无法部署具有此名称的文件。

  • 我们应该在CodingGuidelineCodingGuideline.targets nuget 包存储库中创建( ProjectName.targets ) 文件,并将此代码放入其中以复制为.development.editorconfig.editorconfig

    <Project>
        <Target Name="CodingGuidelineEditorConfig" AfterTargets="BeforeBuild" BeforeTargets="CoreBuild">
            <Copy SourceFiles="$(MSBuildThisFileDirectory)\development.editorconfig" DestinationFiles=".editorconfig" />
        </Target>
    </Project>
    
  • 当我们将CodingGuideline引用添加到任何带有 的存储库时,CodingGuideline.targets将自动触发并将.editorconfig文件复制到每个项目的根目录。

  • 拉取请求部分与解决方案 1 相同。


概括

如您所见,我们实际上不需要Directory.Build.props对这两种解决方案进行定义。但是,当然,如果您想将两个配置文件都保留在项目中,我不能干涉您的业务。

顺便说一句,我们决定使用.editorconfig而不是ruleset。因为本文档说,如您所说,不推荐使用规则集,并且他们建议使用.editorconfig

我认为第一个解决方案比第二个解决方案好。因为.editorconfig文件在目录级别是唯一的,所以没有一个存储库/解决方案/项目包含.editorconfig文件。但是开发人员必须.editorconfig手动将文件放入根存储库目录。

恰恰相反,第二种解决方案更加自动化,但整个存储库必须包含.editorconfig. 也许有一种方法可以从解决方案资源管理器中隐藏它,但我无法完全研究。

每个项目都有一个 .editorconfig 文件


推荐阅读