EPPlus v5.7.5部署后出现Microsoft.IO.RecyclableMemoryStream加载错误如何解决
彻底解决EPPlus与Microsoft.IO.RecyclableMemoryStream版本冲突方案
该错误属于典型的.NET程序集引用不匹配问题:EPPlus v5.7.5编译时依赖的是
Microsoft.IO.RecyclableMemoryStream v1.4.1.0,虽然官方文档说明兼容1.4以上版本,但运行时默认会严格匹配编译时引用的版本号,再加上多项目引用不同版本的依赖,就会出现清单定义不匹配的报错。调试阶段能正常运行是VS自动做了隐式的版本适配,打包时没有自动处理配置才会暴露问题。
解决步骤
1. 统一全解决方案的依赖版本
- 打开解决方案级Nuget包管理界面,将所有项目的
Microsoft.IO.RecyclableMemoryStream统一升级到目标最新v2.1.3版本,确保没有任何项目引用v2.1.2或更低版本,从根源消除多版本冲突隐患。
2. 添加强命名程序集绑定重定向
绑定重定向规则仅对主启动项目的配置文件生效,公共类库项目无需添加该配置:
- 如果你使用的是.NET Framework项目,在主启动项目的
App.config的<runtime>节点下添加以下规则:
<dependentAssembly> <assemblyIdentity name="Microsoft.IO.RecyclableMemoryStream" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.1.3.0" newVersion="2.1.3.0" /> </dependentAssembly>
如果使用packages.config管理Nuget包,也可以右键主项目,选择【解决Nuget包冲突】,Visual Studio会自动生成正确的绑定重定向规则到App.config中。
- 如果你使用的是.NET Core/.NET 6+项目,在主启动项目的.csproj文件
<PropertyGroup>节点中添加以下配置,开启自动绑定重定向:
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
3. 修正MSI打包配置
- 打开VS安装项目的文件系统视图,确认打包内容中已经包含主项目输出的配置文件
[你的应用名].exe.config,之前调试正常打包报错90%的概率是打包时遗漏了带绑定重定向规则的配置文件,导致运行时无法加载版本适配规则。如果没有自动包含,可以手动添加主项目输出的config文件到应用程序安装目录。
4. 部署验证
- 安装完成后,检查应用安装目录下的配置文件是否包含绑定重定向规则,同时确认目录下的
Microsoft.IO.RecyclableMemoryStream.dll文件版本为v2.1.3.0,无旧版本dll残留即可。
内容的提问来源于stack exchange,提问作者Alex Developer
相关产品推荐
相关产品推荐

