.NET Framework从4.6.1迁移至4.7.2后出现运行时错误求助
.NET Framework 4.6.1升级到4.7.2后System.Runtime.InteropServices.RuntimeInformation找不到的问题解决及迁移步骤
问题原因
System.Runtime.InteropServices.RuntimeInformation在.NET Framework 4.7及以上版本中是系统内置程序集,无需通过NuGet包引入。你的项目此前因4.6.1不内置该程序集而安装了对应NuGet包,升级到4.7.2后,NuGet包的4.0.2.0版本与系统内置的4.0.0.0版本产生冲突,导致运行时无法找到指定版本的程序集。
解决方案
- 移除冲突的NuGet包
在Package Manager Console中执行以下命令,强制卸载该NuGet包:
Uninstall-Package System.Runtime.InteropServices.RuntimeInformation -Force
- 修复web.config中的程序集绑定重定向
打开web.config,找到<runtime>节点下的<assemblyBinding>,添加或修正针对该程序集的绑定重定向,将旧版本指向系统内置的4.0.0.0版本:
<dependentAssembly> <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.0.0" /> </dependentAssembly>
若已存在该重定向条目,检查版本号是否正确,确保newVersion为4.0.0.0。
- 清理并重新生成项目
- 删除项目目录下的
bin和obj文件夹 - 在Visual Studio中执行
Build -> Clean Solution - 重新生成解决方案(
Build -> Rebuild Solution)
- 验证项目引用
检查项目引用中的System.Runtime.InteropServices.RuntimeInformation,确保其路径指向.NET Framework 4.7.2的系统引用路径(通常为C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Runtime.InteropServices.RuntimeInformation.dll),如果是NuGet包引用,直接移除后重新添加系统引用。
迁移至.NET Framework 4.7.2的额外步骤
除你已执行的操作,还需完成以下步骤:
- 更新httpRuntime节点的targetFramework:在web.config中找到
<httpRuntime>节点,添加或修改targetFramework="4.7.2",完整节点示例:<httpRuntime targetFramework="4.7.2" /> - 检查NuGet包兼容性:逐一确认项目中所有NuGet包是否支持.NET Framework 4.7.2,对不兼容的旧包,升级到对应支持版本(不要仅执行
Update-Package -Reinstall,需主动升级版本)。 - 适配框架行为变化:.NET Framework 4.7.x对加密、异步操作、身份验证等功能有行为调整,需测试项目核心功能(比如你的Azure Key Vault访问逻辑),确保适配新框架特性。
- 清理冗余配置:移除web.config中针对旧框架的冗余配置,比如旧版本的程序集绑定重定向、过时的appSettings条目。
- 验证发布配置:检查项目的发布配置(右键项目 -> 发布),确保发布时正确复制依赖文件,未遗漏系统内置程序集的引用。
内容的提问来源于stack exchange,提问作者ASPed
相关产品推荐
相关产品推荐

