Visual Studio 在调试和发布配置之间指定单独的.editorconfig文件

qf9go6mv  于 2023-05-07  发布在  其他
关注(0)|答案(3)|浏览(217)

我正在使用VS 2019 16.8.3,我想在solution .editorconfig文件中指定一些代码分析规则(dotnet_diagnostic.CAXXXX.severity),仅适用于发布版本。
当我在.editorconfig文件中添加规则时,调试构建时间会增加几分钟。在项目属性中,所有分析器复选框都未选中为“生成时运行”。
所以我想从代码分析中排除调试构建。是否可以仅为发布版本指定.editorconfig文件?
或者是否可以在构建时禁用此.editconfig,而只应用于手动代码分析?

nxagd54h

nxagd54h1#

TLDR

您可以在Directory.Build.props中设置.editorconfig文件,如下所示:

<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环境中的项目或解决方案构建阶段,pull请求被给予错误。
顺便说一下,我们有一个名为CodingGuideline的仓库来存储我们的.editorconfig文件,并引用一些分析器,如StyleCop。同时,这个仓库是一个nuget包。我们所有的仓库都引用了这个包。
我们有一些解决方案如下:

方案一

  • 我们可以存储.editorconfigreview.editorconfig单独的文件。开发人员已经有了存储库目录来保存公司的存储库,每个人都手动将.editorconfig放入这个目录中。(如果你不想手动放置配置文件,你可以尝试解决方案2)这样,整个仓库将遵循相同的代码风格和编码规则。
  • 如果开发者创建了pull请求,CodingGuidelines仓库会自动克隆到build目录。克隆后,将复制名为.editorconfigreview.editorconfig文件。就是这样。当dotnet build命令运行时,一些定义review.editorconfig的规则被破坏,pull request将抛出错误。

方案二

  • 如果我们不想手动放置配置文件,我们可以通过nuget包部署配置文件。在此选项中,我们存储development.editorconfigreview.editorconfig单独的文件。我们不能使用文件名.editorconfig,因为我们不能部署具有此名称的文件。
  • 我们需要在CodingGuidelinenuget包仓库中创建CodingGuideline.targetsProjectName.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**。因为这篇文档说ruleset如你所说已弃用,他们建议使用**.editorconfig**。
我认为第一个解决方案比第二个解决方案好。由于.editorconfig文件在目录级别是唯一的,因此没有任何存储库/解决方案/项目包含.editorconfig文件。但是开发人员必须手动将.editorconfig文件放到根存储库目录中。
恰恰相反,第二种解决方案更加自动化,但整个存储库必须包含.editorconfig。也许有一种方法可以隐藏它从解决方案资源管理器,但我不能完全研究。

qgzx9mmu

qgzx9mmu2#

由于您的配置条件,.editorconfig文件不是添加自定义分析规则的理想选择。
最好的方法是使用MSBuild函数Directory.Build.props文件来添加它们,这更纯粹。

1)创建一个规则集文件,并添加任何要用于Debug的代码分析
**2)**在项目文件夹下添加一个名为Directory.Build.props的文件

**3)**在文件下面添加这些:

<Project>

  <PropertyGroup Condition="'$(Configuration)'=='Debug'">

    <!--the full path of your ruleset file for Debug mode-->
    <CodeAnalysisRuleSet>xxx\RuleSet1.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>

</Project>

因此当您使用Release构建项目时,由于msbuild条件,规则集将跳过,并且仅适用于Debug模式。

您还可以为“发布”模式添加另一个规则集。并在相应规则集文件中的相应配置下添加代码Analysis。

46qrfjad

46qrfjad3#

您也可以尝试保留您的.editorconfig文件并将其添加到您的项目(或某个地方的Directory.Build.props文件):

<PropertyGroup>
  <RunCodeAnalysis Condition="'$(Configuration)' == 'Debug'">false</RunCodeAnalysis>
</PropertyGroup>

相关问题