举个栗子: 你的类库引用了 log4net 2.0.8 ( log4net 依赖.NETStandard 1.3) 而你的项目使用了.NET Core 3.1 以上。
错误消息:
错误 检测到包降级: System.IO.FileSystem 从 4.3.0 降级到 4.0.1。直接从项目引用包以选择不同版本。
XXX.YYY.API -> XXX.YYY -> log4net 2.0.8 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.IO.FileSystem (>= 4.3.0)
在项目中出现还原错误时,将包引用添加到包的更高版本。
当在 .NET Core 3.0 或更高版本的项目中同时引用时,与 .NET Core 1.0 和1.1 随附的某些包组合不兼容。 问题包通常以 System. 或 Microsoft. 开头,并具有4.0.0 和4.3.1 之间的版本号。 在这种情况下,降级消息将具有从运行时开始的包。 依赖关系链。
微软官方文档:https://docs.microsoft.com/zh-cn/nuget/reference/errors-and-warnings/nu1605
从文档中得知解决的办法有两种,一种可以是按照错误消息说的,直接引用包,让编译时不用依靠系统去加载依赖的引用包,而是自己已经将那部分冲突的包引用好。第二个办法是指定引用的版本,就是下面的办法,指定从dotnet Core 3.1版本处引用那些包,其实也是类似第一个办法,只是简化了,不一个一个包去引用,而且指定整个环境。
这里推荐用第二种方法去解决,毕竟一个一个引用添加比较麻烦。以下是第二种解决办法。
在项目的配置文件里面添加配置,版本号以自己的为准