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

Project Orleans无法找到Grain实现求助(.NET 7+Orleans 7.0.2)

解决Orleans 7中无法找到Grain实现类的问题

出现这个错误的核心原因是:Orleans 7 默认不会自动扫描所有引用项目中的Grain实现类,即便你的ConsoleApp已经引用了Grains项目,也需要手动配置让Orleans明确加载包含Grain实现的程序集。

具体解决步骤

修改ConsoleApp项目中Program.cs的Orleans配置部分,添加程序集扫描配置:

var host = Host.CreateDefaultBuilder(args)
    .UseOrleans(builder =>
    {
        builder.UseLocalhostClustering();
        // 配置加载Grains项目的程序集,让Orleans能找到Grain实现
        builder.ConfigureApplicationParts(parts =>
            parts.AddApplicationPart(typeof(StockGrain).Assembly).WithReferences());
    }).Build();

await host.StartAsync();

var client = host.Services.GetRequiredService<IGrainFactory>();
var grain = client.GetGrain<IStock>(1);
// 可添加调用验证功能是否正常
var stockCount = await grain.Get();
Console.WriteLine($"当前库存:{stockCount}");

await host.StopAsync();

代码说明

  • AddApplicationPart(typeof(StockGrain).Assembly):通过StockGrain的类型获取其所在的Grains项目程序集,告诉Orleans要扫描这个程序集里的Grain实现。
  • WithReferences():自动加载该程序集引用的其他相关程序集(比如Contracts项目的程序集),确保Orleans能找到对应的Grain接口定义。

备选方案(按程序集名称加载)

如果你知道Grains项目的程序集名称,也可以直接通过名称指定:

builder.ConfigureApplicationParts(parts =>
    parts.AddAssembly("Grains"));

额外检查项

确认ConsoleApp项目是项目引用Grains和Contracts项目,而非通过NuGet包引用——项目引用才能保证程序集被正确复制到输出目录,Orleans才能扫描到。

内容的提问来源于stack exchange,提问作者Kenan BAŞDEMİR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:59:58