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

IIncrementalGenerator未触发:如何仅引用Domain.Core包使其生效

解决办法

方式一:让Domain.Core包自动关联SourceGenerator包

修改Domain.Core项目里的项目引用配置,加上PrivateAssets="none",这样Domain.Core的NuGet包会自动带上对SourceGenerator包的依赖,用户安装Domain.Core时,NuGet会自动把SourceGenerator也装上:

<ItemGroup>
  <ProjectReference Include="..\SourceGenerator.csproj" 
                    ReferenceOutputAssembly="false" 
                    PackAsAnalyzer="true"
                    PrivateAssets="none" />
</ItemGroup>

重新打包Domain.Core之后,用户只需要引用这一个包,生成器就能正常工作。

方式二:把SourceGenerator直接打包进Domain.Core包

要是不想让用户依赖列表里出现SourceGenerator,可以把它的分析器dll直接塞进Domain.Core的包里面:

  1. 保持SourceGenerator项目的现有配置不变,它已经会把自身dll输出到指定目录。
  2. 给Domain.Core项目添加一个配置节点,把SourceGenerator的dll打包到自己的分析器目录里:
    <ItemGroup>
      <None Include="..\SourceGenerator\bin\$(Configuration)\netstandard2.0\SourceGenerator.dll" 
            Pack="true" 
            PackagePath="analyzers/dotnet/cs" 
            Visible="false" />
    </ItemGroup>
    
    注意把路径换成你SourceGenerator项目的实际输出路径,确保能正确找到dll文件。
  3. 若采用这种方式,也可以删除Domain.Core里对SourceGenerator的项目引用,避免重复打包。

验证步骤

改完配置重新打包两个项目,找个测试项目只安装Domain.Core包:

  • 方式一:检查NuGet是否自动安装了SourceGenerator;方式二:查看Domain.Core包的analyzers目录里是否包含SourceGenerator.dll
  • 编写一个带[EventApply]特性的类,验证生成器是否能正常生成代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:54:53