使用Hangfire Server结合Redis Pro时触发System.MissingMethodException异常求助
这个错误是典型的版本兼容性问题——你项目中使用的Hangfire.Pro.Redis版本依赖的StackExchange.Redis版本,和当前项目实际引用的StackExchange.Redis版本不匹配,导致运行时找不到StackExchange.Redis.IRedisAsync.get_Multiplexer()这个方法。
我给你几个具体的解决步骤:
- 先确认
Hangfire.Pro.Redis的兼容版本要求:打开NuGet包管理器,查看你安装的Hangfire.Pro.Redis版本对应的依赖项,找到它要求的StackExchange.Redis版本范围(比如有些版本要求2.6.x及以上,不能用3.x的预览版)。 - 统一项目中
StackExchange.Redis的版本:在你的.csproj文件里,确保所有直接或间接引用StackExchange.Redis的地方都使用同一个符合要求的版本。比如如果Hangfire.Pro.Redis 3.0.0需要StackExchange.Redis >=2.6.0,就明确指定版本:<ItemGroup> <PackageReference Include="StackExchange.Redis" Version="2.6.122" /> <PackageReference Include="Hangfire.Pro.Redis" Version="3.0.0" /> </ItemGroup> - 清理项目依赖:删除项目根目录下的
bin和obj文件夹,然后执行dotnet clean和dotnet restore命令,重新加载所有依赖,避免旧版本的dll残留。 - 排查间接依赖冲突:如果还是有问题,用
dotnet list package --include-transitive命令列出所有项目依赖(包括间接引用的包),看看有没有其他包强制引入了不兼容的StackExchange.Redis版本,然后通过<PackageReference>的Version属性强制统一版本。
你遇到的异常信息:
System.MissingMethodException: 未找到方法: 'StackExchange.Redis.ConnectionMultiplexer StackExchange.Redis.IRedisAsync.get_Multiplexer()'。
在 Hangfire.Pro.Redis.RedisStorage.GetMasterEndpoint()
在 Hangfire.Pro.Redis.RedisStorage.ToString()
在 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
在 System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
在 Hangfire.BackgroundJobServer..ctor(BackgroundJobServerOptions options, JobStorage storage, IEnumerable1 additionalProcesses, IJobFilterProvider filterProvider, JobActivator activator, IBackgroundJobFactory factory, IBackgroundJobPerformer performer, IBackgroundJobStateChanger stateChanger) 在 Hangfire.HangfireApplicationBuilderExtensions.UseHangfireServer(IApplicationBuilder app, BackgroundJobServerOptions options, IEnumerable1 additionalProcesses, JobStorage storage)
在 UlysOpusApi.Configuration.Hangfire.HangfireMiddlewareConfiguration.UseHangfire(IApplicationBuilder app, HangfireConfiguration configuration) 位置 C:\Work\interface_opus_digital\UlysOpusApi\Main\4_Infrastructure\UlysOpusApi.Configuration\HangFire\HangfireMiddlewareConfiguration.cs:行号 17
在 UlysOpusApi.Web.Startup.Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime, IHostingEnvironment env, ILogger logger, IHangfireService hangfireService, IOptions1 swaggerConfiguration, IOptions1 hangfireConfiguration) 位置 C:\Work\interface_opus_digital\UlysOpusApi\Main\1_DistributedInterfaceLayer\UlysOpusApi.Web\Startup.cs:行号 95
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
在 Microsoft.ApplicationInsights.AspNetCore.ApplicationInsightsStartupFilter.<>c__DisplayClass2_0.b__0(IApplicationBuilder app)
在 Microsoft.Extensions.DependencyInjection.AutoRegisterMiddleware.<>c__DisplayClass4_0.b__0(IApplicationBuilder app) 位置 E:\BA\56\s\src\Microsoft.AspNetCore.Mvc.Versioning\Microsoft.Extensions.DependencyInjection\AutoRegisterMiddleware.cs:行号 46
在 Microsoft.AspNetCore.Mvc.Internal.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
在 Microsoft.AspNetCore.Server.IIS.Core.IISServerSetupFilter.<>c__DisplayClass2_0.b__0(IApplicationBuilder app)
在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder app)
在 Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder builder)
在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
内容的提问来源于stack exchange,提问作者Anthony

