我在尝试在 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 之前手动复制了该文件,则它可以工作。
您知道为什么会这样以及如何正确处理这个问题吗?
为了确保 MSBuild 在构建过程中有效地复制和识别 .editorconfig 文件,解决潜在的计时问题至关重要。如果您遇到过需要手动干预才能成功构建和错误识别的情况,请考虑以下简化方法:
最初修改.props文件后,执行:
dotnet build
此操作可确保正确复制 .editorconfig 文件。
随后,开始清理:
dotnet clean
此步骤可确保后续构建正确识别 .editorconfig 文件。
最后,执行另一个构建:
dotnet build
此时,构建应该可以顺利进行,并正确使用 .editorconfig 文件。
自动化这些手动步骤可以显着提高工作流程效率。您可以将以下代码片段集成到您的 .props 文件中:
<!-- Clean the solution/project -->
但是,还有一个更优雅的解决方案需要探索。通过将 CopyEditorConfig 目标设置为 InitialTargets,您可以消除额外的手动干预或重建项目的需要:
<Project InitialTargets="CopyEditorConfig" ...>
...
实施此调整应将 .editorconfig 文件的复制无缝集成到初始构建过程中,确保工作流程更顺畅、更高效。