解决 System.Runtime.CompilerServices.Unsafe 程序集版本不匹配问题-LMLPHP

你是否在.NET 文件上传中遇到过令人头疼的引用错误?今天我们就来深入探讨如何解决 System.Runtime.CompilerServices.Unsafe 引用错误

1. 错误现象
  • 在文件上传操作中,当处理特定文件格式(如.xlsx)时,代码workbook = new XSSFWorkbook (myfile.InputStream);出现异常。
  • 异常信息为NPOI.POIXMLException,其内部异常是FileLoadException,提示未能加载文件或程序集 “System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture= neutral, PublicKeyToken= b03f5f7f11d50a3a” 或它的某一个依赖项,并且程序集清单定义与程序集引用不匹配(异常来自 HRESULT:0x80131040)。

解决 System.Runtime.CompilerServices.Unsafe 程序集版本不匹配问题-LMLPHP

2. 解决方法
  • 对于开发.NET 应用且遇到此类程序集版本相关问题,可以在应用程序的配置文件(通常是app.config文件;如果是 Web 应用,则是web.config文件)中添加绑定重定向。

Web.config 配置文件中查看是否有以下代码,没有手动添上

	<runtime>
		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> //定义了程序集绑定设置
			<dependentAssembly> //指定了一个依赖的程序集
				//元素标识了特定的程序集,这里是 “System.Runtime.CompilerServices.Unsafe”,通过名称、公钥标记、区域设置等信息来唯一确定
				<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
				//元素用于重定向程序集的版本。这里将旧版本范围从 “0.0.0.0” 到 “6.0.0.0” 的引用重定向到新版本 “6.0.0.0”
				<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
			</dependentAssembly>
		</assemblyBinding>
	</runtime>
10-31 01:19