.NET Framework下ASPX页面引用DLL遇System.Runtime程序集找不到问题
问题本质与解决办法
为什么会报错?
你碰到的是典型的跨.NET平台程序集兼容性冲突:.NET Core 3.1编译的MyLib.dll依赖的是.NET Core生态下的System.Runtime 4.2.2.0版本,但你的ASP.NET Web应用基于.NET Framework运行,它的程序集加载机制无法识别这个.NET Core专属的程序集版本——控制台应用能正常运行,要么是因为控制台本身就是.NET Core环境,要么是.NET Framework控制台通过隐式兼容包做了适配,但老ASP.NET环境没有这个适配逻辑。
可行的解决路径
1. 把类库改成.NET Standard 2.0(推荐)
.NET Standard是专门用来实现跨.NET平台兼容的标准,.NET Framework 4.6.1+和.NET Core 3.1都完美支持.NET Standard 2.0,这样你的类库能同时在两种环境下正常工作:
- 打开
MyLib的项目文件(.csproj),把目标框架改成:<TargetFramework>netstandard2.0</TargetFramework> - 重新编译类库,替换ASP.NET项目里的旧引用即可。
2. 给ASP.NET项目加程序集绑定重定向
如果暂时没法修改类库,可通过配置强制.NET Framework加载兼容的System.Runtime版本:
- 打开ASP.NET项目的
web.config,在<configuration>节点内添加以下配置:
提示:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.2.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>newVersion可以根据你项目中实际存在的System.Runtime版本调整,.NET Framework 4.7及以上一般用4.0.0.0就能兼容。
3. 升级ASP.NET项目到.NET Core
如果项目允许重构,直接把旧的ASP.NET Web应用升级为ASP.NET Core项目,这样和你的.NET Core 3.1类库环境完全匹配,从根源上解决兼容性问题。
验证步骤
- 先清理整个解决方案(菜单选
Build -> Clean Solution) - 重新生成所有项目(
Build -> Rebuild Solution) - 再测试ASPX页面是否正常运行
内容的提问来源于stack exchange,提问作者Jvhkl
相关产品推荐
相关产品推荐

