c# - 在面向使用者代码的 NuGet 库中使用源生成器

标签 c# code-generation c#-8.0

我正在尝试使用新的源生成器将我的很多运行时反射内容移动到 AOT,但是我面临一些问题。
先说一下我的要求吧。

  • 该库的代码需要针对 .NET 5,而不是针对 Source Generator 本身,虽然拥有它会很好,但根据 MS dev-blog目前还不可能。
  • 源生成器本身不需要与原始 NuGet 包分开安装。

  • 现在来看一个更直观的例子,假设包 A 是 NuGet 库,它应该包含包 A 的用户的代码。包 B,包含源生成器的包,这些源生成器再次应该在用户代码库上执行,而不是在包装 A。包装 B 应与包装 A 一起运输。
    为什么将 Source Generator 与库一起交付如此重要? SG 将生成库本身所需的代码。
    我可能在阅读文档时跳过了一些东西,但是我只是无法弄清楚,假设这甚至是可能的。

    最佳答案

    事实证明,这比预期的要容易。通过使用 PackagePath 将源生成器作为分析器引用,可以在同一个 NuGet 包中提供源生成器。父项目的 .csproj 文件中的参数。

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

    关于c# - 在面向使用者代码的 NuGet 库中使用源生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64505804/

    相关文章:

    c# - 具有可空引用类型的 out 参数

    c# - c#8 中的公共(public)接口(interface)成员

    javascript - Moment JS 日期到 C# 日期

    C# 函数 : access local variables in a block

    c++ - 是否有任何工具可以将 C++ 代码移植到 C# 代码?

    visual-studio-2008 - 从对象生成 DTO

    c# - 可空泛型引用类型

    c# - 我需要帮助修改 C# 正则表达式

    在 32 位和 64 位 Linux 中使用 long 的 C# pInvoke :

    python - python 中的宏