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

.NET Core连接Redis时遇System.Runtime.CompilerServices.Unsafe加载错误求助

解决.NET Core部署UAT后Redis连接时System.Runtime.CompilerServices.Unsafe加载失败问题

问题核心

本地运行正常,但UAT环境部署后出现程序集加载错误;降级StackExchange.Redis和Unsafe版本虽能恢复Redis连接,但会导致MySQL无法工作,需找到同时兼容两者的解决方案。

具体解决方案

1. 对齐本地与UAT的.NET Core运行时版本

.NET Core的程序集加载逻辑依赖运行时版本,若UAT环境的运行时版本低于本地(比如本地用.NET Core 3.1,UAT用2.1),会直接导致绑定重定向失效:

  • 查看本地项目的目标框架(打开.csproj文件,查看<TargetFramework>节点)
  • 在UAT服务器上安装完全匹配的.NET Core Runtime版本

2. 验证UAT部署目录的程序集完整性

部署过程中可能遗漏或错放依赖程序集:

  • 本地发布项目后,检查输出目录中是否存在System.Runtime.CompilerServices.Unsafe.dll,版本需为5.0.0.0
  • 若UAT部署目录中缺失该文件,手动复制对应版本的dll到目录,或重新发布时勾选“包含所有依赖项”

3. 用项目配置自动生成绑定重定向

.NET Core中手动编写的web.config绑定重定向可能不生效,改为通过项目配置自动生成适配规则:
在项目的.csproj文件中添加以下配置:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

重新发布项目,系统会自动生成适配当前环境的绑定重定向规则,覆盖web.config中的手动配置

4. 强制统一依赖包版本

通过项目文件强制指定Unsafe版本,避免不同NuGet包的版本冲突:
在.csproj中添加:

<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="5.0.0" PrivateAssets="all" />

PrivateAssets="all"会限制该包仅当前项目使用,防止上层项目引入其他版本引发冲突

5. 排查Redis服务器版本兼容性

StackExchange.Redis 2.6.x对Redis服务器版本有最低要求(建议4.0+),若UAT的Redis版本过低:

  • 升级UAT的Redis服务器到稳定版(如5.x或6.x),测试是否解决加载问题

6. 寻找兼容StackExchange.Redis和MySQL的中间版本

降级后MySQL失效,说明MySQL驱动(如MySqlConnector)依赖特定版本的Unsafe:

  • 查看MySqlConnector的NuGet依赖说明,确认它兼容的Unsafe版本范围
  • 测试StackExchange.Redis 2.5.x + System.Runtime.CompilerServices.Unsafe 4.7.x的组合,该版本组合大概率同时兼容Redis和MySQL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:25:23