.NET Framework 4.7.2 WebApi无法加载System.Collections 4.0.11.0报错
解决方案
这个异常是.NET Framework 4.6升级到4.7.2后,程序集绑定规则变化、依赖复制策略变更导致的门面程序集缺失问题,可按以下步骤依次排查修复:
1. 重新生成程序集绑定重定向
- 打开WebApi项目的「管理NuGet程序包」界面,将所有
System.Collections开头的NuGet依赖统一升级到最新稳定版 - 打开Package Manager Console,执行命令:
Update-Package -reinstall - 执行完成后打开项目
web.config,检查runtime/assemblyBinding节点下是否存在以下配置,不存在则手动添加:
其余相关的<dependentAssembly> <assemblyIdentity name="System.Collections" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.0.0" /> </dependentAssembly>System.Collections.Concurrent、System.Collections.NonGeneric等程序集也按上述格式补充绑定重定向规则。
2. 强制指定依赖复制到本地
- 在项目的「引用」列表中找到
System.Collections等缺失的程序集,右键选择「属性」,将「复制本地」属性修改为True - 如果引用列表中找不到对应程序集,可先通过NuGet安装
System.Collections包后再调整属性
3. 强制复制所有NuGet依赖到输出目录
- 右键项目选择「卸载项目」,再次右键选择「编辑[项目名].csproj」
- 在顶层
PropertyGroup节点中添加以下配置:<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> - 保存文件后重新加载项目,重新生成解决方案即可看到缺失的dll已经输出到bin目录
4. 检查.NET Standard兼容问题
如果项目引用了.NET Standard类库,确认类库版本不高于.NET Standard 2.0,更高版本的.NET Standard无法和.NET Framework 4.7.2完全兼容,会触发依赖加载异常。
内容的提问来源于stack exchange,提问作者KiddoDeveloper
相关产品推荐
相关产品推荐

