【问题标题】:How do I serve a global AnalyzerConfig file from a NuGet package?如何从 NuGet 包提供全局 AnalyzerConfig 文件?
【发布时间】:2022-11-10 12:31:57
【问题描述】:

我们有大约 35 个不同的 .NET 6 项目,它们都使用相同的全局 AnalyzerConfig 文件,如下所示:

<ItemGroup>
  <GlobalAnalyzerConfigFiles Include="$([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)', '.analyzerconfig'))" />
</ItemGroup>

.analyzerconfig 文件为分析器指定了一系列规则和严重性级别:

is_global = true

dotnet_sort_system_directives_first = true
csharp_style_var_for_built_in_types = false : warning

dotnet_diagnostic.CA2254.severity   = warning
dotnet_diagnostic.CS4014.severity   = error

# ...other rules omitted for clarity

我们目前在所有 Git 存储库中复制了 .analyzerconfig 文件,随着我们配置更多规则,维护变得越来越痛苦。我正在寻找一种方法来将此文件从 NuGet 包提供给我们所有的项目。

当我们配置更多规则时,我们希望能够更改只要NuGet 项目中的 AnalyzerConfig 文件,推送新版本的包,并等待我们的机器人在一夜之间处理依赖项更新,这样我们就可以从项目中删除所有重复的 AnalyzerConfig 文件,而不必担心它们会过时。

所以理想情况下,我想:

  1. 在 NuGet 包中包含全局 AnalyzerConfig 文件。
  2. 在每个项目中安装 NuGet 包,并通过我们所有项目中的GlobalAnalyzerConfigFiles 属性指向文件(位于已安装的包中)。

    我不希望在我们所有的 Git 存储库中都存在全局 AnalyzerConfig 文件;将文件复制到项目目录中某处的自定义构建任务并不是我真正想要的。它应该只来自 NuGet 包,但是我不完全确定这是否可能。如果不可能,我想最好的方法是只 gitignore 每个存储库中的复制文件。

    是否可以将GlobalAnalyzerConfigFiles 属性配置为指向 NuGet 包内的文件?如果是这样,我将如何实现这一目标?

    我搜索了文档和各种文章,但找不到任何有关如何操作的信息。

【问题讨论】:

    标签: .net msbuild


    【解决方案1】:

    正如here 所记录的那样,您可以将&lt;PackageId&gt;.props 文件放在nuget 包中的buildbuildMultiTargetingbuildTransitive 文件夹之一中。

    如果您的包名为“MyPackage”,并且您决定使用build 文件夹,那么您的 nuget 包的内容可以是:

    build/MyPackage.analyzerconfig
    build/MyPackage.props
    

    build 文件夹中的MyPackage.props 文件将被任何通过&lt;PackageReference&gt; 直接引用它的项目自动引用。它的内容可以是:

    <Project>
     <ItemGroup>
      <GlobalAnalyzerConfigFiles Include="$(MSBuildThisFileDirectory)MyPackage.analyzerconfig" />
     </ItemGroup>
    </Project>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2018-05-08
      • 2023-01-22
      • 1970-01-01
      相关资源
      最近更新 更多