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的包里面:
- 保持SourceGenerator项目的现有配置不变,它已经会把自身dll输出到指定目录。
- 给Domain.Core项目添加一个配置节点,把SourceGenerator的dll打包到自己的分析器目录里:
注意把路径换成你SourceGenerator项目的实际输出路径,确保能正确找到dll文件。<ItemGroup> <None Include="..\SourceGenerator\bin\$(Configuration)\netstandard2.0\SourceGenerator.dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" /> </ItemGroup> - 若采用这种方式,也可以删除Domain.Core里对SourceGenerator的项目引用,避免重复打包。
验证步骤
改完配置重新打包两个项目,找个测试项目只安装Domain.Core包:
- 方式一:检查NuGet是否自动安装了SourceGenerator;方式二:查看Domain.Core包的analyzers目录里是否包含SourceGenerator.dll
- 编写一个带
[EventApply]特性的类,验证生成器是否能正常生成代码
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

