在针对消费者代码的NuGet库中使用源生成器

问题描述

我正在尝试使用新的Source Generator将许多运行时反射内容移至AOT,但是我遇到了一些问题。 首先让我说说我的要求。

  • 该库的代码需要以.NET 5为目标,但不是针对Source Generator本身的,尽管这很不错,但是根据MS dev-blog来说,这还不可能。
  • 不需要源生成器本身与原始NuGet软件包分开安装。

现在通过一个更直观的示例,将包A想象为NuGet库,其中应包含包A用户代码。包B,包中包含源生成器的包应再次在用户代码库上执行而不是包装A。包装B应该与包装A一起运送。

为什么将Source Generator与库一起运送这么大的事情? SG将生成库本身所需的代码

在阅读文档时,我可能已经跳过了一些内容,但是,即使有可能,我也无法弄清楚。

解决方法

事实证明它比预期的要容易。可以通过在父项目的 .csproj 文件中将源生成器作为带有 PackagePath 参数的分析器引用来在同一 NuGet 包中传送源生成器。

<ItemGroup>
    <None Include="Path\To\SourceGenerator\bin\$(Configuration)\netstandard2.0\NameOfSourceGenerator.dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
</ItemGroup>