.NET Framework 4.8中System.Buffers绑定重定向部分机器失效
Bug详情
我们在.NET Framework 4.8解决方案中使用MessagePack。部分客户机器上的序列化功能出现异常,核心问题出在System.Buffers的加载上:System.Buffers.dll无法加载,原因是版本冲突——MessagePack依赖4.0.2.0版本,而另一个NuGet包依赖4.0.3.0版本的System.Buffers。但App.config中配置的BindingRedirect(绑定重定向)完全未生效。
实际现象
部分机器首次加载MessagePack.dll时抛出以下错误:
System.IO.FileLoadException: 无法加载文件或程序集“System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。找到的程序集清单定义与程序集引用不匹配。
- 使用的MessagePack版本:2.5.108
- 运行环境:.NET Framework 4.8
我们通过日志确认客户机器上的绑定重定向未生效,同时附上了正常机器、异常机器的日志以及App.config文件。
将客户机器的安装文件复制到本地后可正常运行;对比正常机器与异常机器的.NET Framework目录下的machine.config文件(路径:C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config),内容完全一致,可排除该文件导致问题的可能。
目前无法在本地复现该问题,已影响约5位客户,其中一位客户的全新Windows Server 2022环境也出现此问题,但我们本地的全新Server 2022环境无法复现。
预期结果
序列化功能应在所有机器上正常运行,System.Buffers 4.0.3.0版本能被正确加载,绑定重定向配置需生效。
附件内容
App.exe.config中的绑定重定向配置
... <dependentAssembly> <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> </dependentAssembly> ...
Fuslog日志 - 正常机器
... 调用程序集: MessagePack, Version=2.5.0.0, Culture=neutral, PublicKeyToken=b4a0369545f0a1be. === 日志: 绑定在默认加载上下文启动。 日志: 使用应用程序配置文件: C:\Users\afi\Desktop\customer data\Password Safe and Repository 8 Server\PSRServerAdmin.exe.config 日志: 未使用主机配置文件。 日志: 使用计算机配置文件: C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 日志: 在应用程序配置文件中找到重定向规则,将4.0.2.0版本重定向到4.0.3.0版本。 日志: 应用策略后的引用: System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 ...
Fuslog日志 - 客户机器(异常)
... 调用程序集: MessagePack, Version=2.5.0.0, Culture=neutral, PublicKeyToken=b4a0369545f0a1be. === 日志: 绑定在默认加载上下文启动。 日志: 使用应用程序配置文件: C:\Program Files\Password Safe and Repository 8 Server\PSRServerAdmin.exe.config 日志: 未使用主机配置文件。 日志: 使用计算机配置文件: C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 日志: 应用策略后的引用: System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 ... 操作失败。 绑定结果: hr = 0x80131040. 无可用描述。 ...
内容的提问来源于stack exchange,提问作者Alexander

