.NET 4.7.1类库引用.NET Core 2.0类库编译报错求助
我之前在处理跨.NET框架引用的时候遇到过几乎一模一样的问题,给你几个亲测有效的解决思路:
统一NuGet包版本
首先检查你的.NET 4.7.1项目中System.Runtime及相关System类库的NuGet包版本。这类冲突大多是因为依赖包版本不一致导致的,你可以在NuGet包管理器里,把所有System.*开头的依赖包统一更新到兼容的版本——对于.NET 4.7.1来说,推荐更新到4.3.0或更高的兼容版本,这样能和.NET Core 2.0依赖的System.Runtime4.2.0.0版本对齐。添加程序集绑定重定向
在.NET Framework项目的app.config(类库项目同样需要这个文件,编译后会生成对应xxx.dll.config)中添加绑定重定向配置,强制运行时使用高版本的System.Runtime。示例配置如下:<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.0.0" newVersion="4.2.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>注意:如果是类库项目,这个配置文件需要和类库一起被引用它的主应用程序加载,或者直接在主应用程序的配置文件中添加相同的重定向规则。
升级.NET Framework版本
.NET 4.7.1对.NET Core API的兼容性虽然不错,但.NET 4.8做了更多兼容优化,能大幅减少这类跨框架版本冲突。你可以尝试把.NET 4.7.1项目升级到.NET Framework 4.8:右键项目→属性→应用程序→目标框架→选择.NET Framework 4.8。切换到PackageReference管理依赖
如果你还在使用旧的packages.config管理NuGet包,很容易出现版本不一致的问题。切换到PackageReference可以让NuGet自动处理依赖版本的统一,操作方式是:右键项目→卸载项目→编辑.csproj文件,替换为PackageReference格式的依赖声明,或者在NuGet包管理器中选择“迁移到PackageReference”选项(如果可用)。
内容的提问来源于stack exchange,提问作者Ben Thomson

