ASP.NET Web应用引用.NET6类库时System.Runtime加载失败求助
解决.NET 4.8 Web Forms引用.NET 6类库的依赖加载错误
问题原因
.NET Framework 4.8 和 .NET 6 属于不同的框架体系,直接跨框架引用类库会导致.NET 6专属的组件(比如System.Runtime 6.0.0.0)无法在.NET Framework环境中被找到。而控制台应用运行正常是因为它和类库同属.NET 6环境,依赖可以正常加载。
解决方案
1. 将类库目标框架改为.NET Standard 2.0
.NET Standard 2.0 同时兼容.NET Framework 4.8 和.NET 6,是跨框架共享代码的最佳选择:
- 右键类库项目 → 选择「属性」
- 在「应用」标签页的「目标框架」下拉菜单中选择
.NET Standard 2.0 - 重新训练机器学习模型,确保生成的模型代码和依赖包都适配.NET Standard 2.0
2. 配置Web项目的绑定重定向
在Web项目的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-6.0.0.0" newVersion="4.2.2.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Collections" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.0.11.0" /> </dependentAssembly> <!-- 根据实际报错添加其他需要重定向的组件 --> </assemblyBinding> </runtime> </configuration>
3. 确保Web项目安装兼容的NuGet包
在Web项目中安装适配.NET Framework 4.8的Microsoft.ML相关包,比如Microsoft.ML(推荐版本v1.7.1及以上,需支持.NET Standard 2.0),避免依赖缺失。
4. 验证调用代码
保持原有调用代码不变,重新编译并运行Web项目:
var sampleData = new MLModel1.ModelInput() { Mood = @"happy", Smell = @"rosegarden", Place = @"mountain", Drink = @"mojito", Category = @"trending", Gender = @"unisex", Time = @"both", Occasion = @"special", Feel = @"elegant", Ingredientsp1 = @"woody", Ingredientsp2 = @"ip5", }; var result = MLModel1.Predict(sampleData).ToString();
内容的提问来源于stack exchange,提问作者CoderTech
相关产品推荐
相关产品推荐

