You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#类库项目使用Source Generator生成代码及打包NuGet的报错排查

问题解答

1. 类库项目使用Source Generator并打包NuGet的可行性

完全可以在C#类库项目中使用Source Generator生成代码,且能将生成逻辑或生成的代码打包到NuGet包中。类库项目和控制台项目对Source Generator的支持没有本质差异,核心是配置正确的项目结构与生成器逻辑。

2. 解决CS8785空引用异常的方案

你遇到的NullReferenceException和项目是类库还是控制台无关,通常是生成器代码中访问了未初始化的对象,以下是具体排查和修复步骤:

  • 检查生成器代码的空引用点:
    比如教程中的代码可能依赖控制台项目的入口点(如compilation.GetEntryPoint(...)),但类库项目没有入口点,导致返回null,后续访问其属性就会抛出异常。要确保所有获取的语法节点、符号、编译对象都做了null校验。
  • 适配类库场景修改生成器逻辑:
    替换掉对控制台入口点的依赖,改为基于类库中的目标元素触发生成。比如改为查找带有自定义属性的类、特定命名空间下的类型等。
  • 确认项目配置正确性:
    生成器项目需设置<IsRoslynComponent>true</IsRoslynComponent>,类库项目引用生成器时,要配置:
    <ItemGroup>
      <ProjectReference Include="..\YourGeneratorProject\YourGeneratorProject.csproj"
                        PrivateAssets="all"
                        IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
    </ItemGroup>
    
  • 调试生成器定位问题:
    可以附加VS调试器到dotnet build进程,或者编写单元测试调试生成器,精准找到抛出空引用的代码行。

3. 打包Source Generator到NuGet的要点

若要将生成器打包为NuGet供其他项目使用,需在生成器项目的csproj中添加必要配置:

<PropertyGroup>
  <PackageId>YourGeneratorPackageName</PackageId>
  <Version>1.0.0</Version>
  <Authors>YourName</Authors>
  <PackageDescription>Source generator for class library projects</PackageDescription>
  <TargetFrameworks>netstandard2.0</TargetFrameworks> <!-- 兼容多数.NET项目 -->
  <IsRoslynComponent>true</IsRoslynComponent>
</PropertyGroup>

打包完成后,其他项目安装该NuGet包,生成器会自动参与编译流程并生成代码。

内容的提问来源于stack exchange,提问作者user13653801

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:33:33