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

带Collect()的增量源代码生成器:目标程序集如何确定?

增量源代码生成器中Collect()对目标程序集的影响

示例代码

public override void Initialize(IncrementalGeneratorInitializationContext context)
{
    var provider = context.SyntaxProvider.CreateSyntaxProvider(FilterSyntaxNode, TransformSyntaxNode)
        .Where(model => model is not null)
        .Collect();

    context.RegisterSourceOutput(provider, GenerateSource!);
}

调用Collect()后,GenerateSource方法的参数会从单个TModel变为ImmutableArray<TModel>,需要接收合并后的模型集合。

当前程序集结构

  • Application项目引用Domain项目
  • Domain项目引用源代码生成器包

未使用Collect()的生成规则

在不调用Collect()的生成器中,生成代码的归属逻辑清晰:基于Domain程序集内类型生成的代码会被放入Domain程序集,基于Application程序集内类型生成的代码则进入Application程序集。

调用Collect()后的目标程序集规则

当通过Collect()合并来自不同程序集的输入后,所有生成的代码都会统一归属到直接引用源代码生成器的程序集——也就是这里的Domain程序集。

这是因为源代码生成器的运行上下文由直接引用它的项目(Domain)决定。即便Application项目通过引用Domain间接使用了生成器,生成器的代码输出只会绑定到直接引用它的程序集,不会分散到多个程序集中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:56:03