通过 nuget 包分发 .editorConfig 自定义设置

问题描述 投票:0回答:1

我在尝试在 C# .NetFramework 解决方案中实现基于编译器的代码分析时遇到问题。我决定将 Microsoft.CodeAnalysis.NetAnalyzers nuget 包与一些自定义 .editorconfig 规则集一起使用,我不想将其直接保留在使用项目中。我使用 .editorconfig 创建了另一个 nuget,其想法是在构建之前将文件复制到每个使用项目,以便触发分析(在构建期间)。

我尝试了一种方法(here描述),其中将 .editorconfig 复制到 .props 文件中定义的 beforeBuild 任务中的 csproj 位置

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <PropertyGroup Condition="('$(Configuration)' == 'Debug')">
    <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
  </PropertyGroup>  
  <ItemGroup>
    <EditorConfigFilesToCopy Include="$(MSBuildThisFileDirectory)..\content\.editorconfig" />
  </ItemGroup>
  <Target Name="CopyEditorConfig" BeforeTargets="BeforeBuild">
    <Message Text="Copying the .editorconfig file from '@(EditorConfigFilesToCopy)' to '$(MSBuildProjectDirectory)'"></Message>
      <Copy 
        SourceFiles="@(EditorConfigFilesToCopy)"
        DestinationFolder="$(MSBuildProjectDirectory)"
        SkipUnchangedFiles="true"
        UseHardlinksIfPossible="false" />
  </Target> 
</Project>

不幸的是,该文件似乎复制得太晚了,因为 msbuild 在构建过程中忽略了它,并且不会像我预期的那样因 CA 违规而失败。如果在运行 msbuild 之前手动复制了该文件,则它可以工作。

您知道为什么会这样以及如何正确处理这个问题吗?

c# msbuild roslyn-code-analysis
1个回答
0
投票

为了确保 MSBuild 在构建过程中有效地复制和识别 .editorconfig 文件,解决潜在的计时问题至关重要。如果您遇到过需要手动干预才能成功构建和错误识别的情况,请考虑以下简化方法:

最初修改.props文件后,执行:

dotnet build

此操作可确保正确复制 .editorconfig 文件。

随后,开始清理:

dotnet clean

此步骤可确保后续构建正确识别 .editorconfig 文件。

最后,执行另一个构建:

dotnet build

此时,构建应该可以顺利进行,并正确使用 .editorconfig 文件。

自动化这些手动步骤可以显着提高工作流程效率。您可以将以下代码片段集成到您的 .props 文件中:

<!-- Clean the solution/project -->

但是,还有一个更优雅的解决方案需要探索。通过将 CopyEditorConfig 目标设置为 InitialTargets,您可以消除额外的手动干预或重建项目的需要:

<Project InitialTargets="CopyEditorConfig" ...>

...

实施此调整应将 .editorconfig 文件的复制无缝集成到初始构建过程中,确保工作流程更顺畅、更高效。

© www.soinside.com 2019 - 2024. All rights reserved.