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

将ISourceGenerator转为IIncrementalGenerator后生成代码无法引用

排查IIncrementalGenerator生成代码无法被测试项目引用的问题

以下是几个核心排查方向:

  • 检查项目引用与依赖传递
    若生成器在单独类库项目中,测试项目必须直接引用该类库。如果通过NuGet包引入生成器,要避免将PrivateAssets设为all(这会阻断生成代码被依赖项目访问),可在测试项目的PackageReference中配置:

    <PackageReference Include="YourGeneratorPackage" Version="x.x.x" PrivateAssets="none" />
    

    同时确保生成器项目的目标框架(如netstandard2.0)与测试项目兼容,满足Roslyn运行环境要求。

  • 验证生成代码的访问修饰符与命名空间
    确认生成的接口是public修饰,且测试项目已通过using语句引入对应命名空间,或使用完全限定名引用。调试时可见代码不代表访问权限正确,若误设为internal,测试项目会无法访问。

  • 检查增量生成器的触发条件
    IIncrementalGenerator的生成逻辑依赖输入增量更新,需确保测试项目编译时满足触发条件:

    • 若生成器基于特定属性、类标记触发,测试项目中是否包含这些触发元素?
    • 检查生成器CreateInitializationContext或RegisterSourceOutput逻辑,是否过滤掉了测试项目的输入(比如判断项目类型、框架版本等,导致测试项目未触发生成)。
  • 确认测试项目的编译配置
    测试项目的.csproj需配置允许访问生成代码的项:

    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
    <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\Generated</CompilerGeneratedFilesOutputPath>
    

    同时确认测试项目的目标框架与生成器兼容,避免因框架版本过低导致生成代码无法被识别。

  • 清理并重新构建解决方案
    缓存的中间文件可能引发异常,删除所有项目的obj和bin目录后,重新构建整个解决方案,确保生成代码为最新状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:03:18