vs使用nuget包时,发现无法解析的“xxx”的不同版本之间存在冲突
用nuget第三方库的时候,经常会出现一些nuget冲突的问题,基本都是多个第三方类库引用同一个类库的不同版本导致的
有时候Visual Studio自己就能帮咱们解决,你需要在警告消息上双击,vs就会在配置文件中给你添加 dependentAssembly 来解决冲突
但是,有时候会出现一个【发现无法解析的“xxx”的不同版本之间存在冲突】的问题,这个vs就没办法帮咱们解决了,比如我这个
严重性 代码 说明 项目 文件 行 禁止显示状态
警告 发现无法解析的“SharpCompress”的不同版本之间存在冲突。
“SharpCompress, Version=0.23.0.0, Culture=neutral, PublicKeyToken=afb0a02973931d96”与“SharpCompress, Version=0.30.1.0, Culture=neutral, PublicKeyToken=afb0a02973931d96”之间存在冲突。
已选择“SharpCompress, Version=0.23.0.0, Culture=neutral, PublicKeyToken=afb0a02973931d96”,因为它是主版本而“SharpCompress, Version=0.30.1.0, Culture=neutral, PublicKeyToken=afb0a02973931d96”不是。
依赖于“SharpCompress, Version=0.23.0.0, Culture=neutral, PublicKeyToken=afb0a02973931d96”[C:\Users\zzz\.nuget\packages\sharpcompress\0.23.0\lib\net45\SharpCompress.dll]的引用。
C:\Users\zzz\.nuget\packages\sharpcompress\0.23.0\lib\net45\SharpCompress.dll
导致引用“C:\Users\zzz\.nuget\packages\sharpcompress\0.23.0\lib\net45\SharpCompress.dll”的项目文件项 Include 特性。
C:\Users\zzz\.nuget\packages\sharpcompress\0.23.0\lib\net45\SharpCompress.dll
依赖于“SharpCompress, Version=0.30.1.0, Culture=neutral, PublicKeyToken=afb0a02973931d96”[]的引用。
C:\Users\zzz\.nuget\packages\mongodb.driver.core\2.13.3\lib\net452\MongoDB.Driver.Core.dll
导致引用“C:\Users\zzz\.nuget\packages\mongodb.driver.core\2.13.3\lib\net452\MongoDB.Driver.Core.dll”的项目文件项 Include 特性。
C:\Users\zzz\.nuget\packages\mongodb.driver.core\2.13.3\lib\net452\MongoDB.Driver.Core.dll
C:\Users\zzz\.nuget\packages\mongodb.driver\2.13.3\lib\net452\MongoDB.Driver.dll
看具体的描述,依然是2个类库引用不同版本的dll导致的,不同的地方在于,有个所谓的“主版本”,不知道vs是什么怎么算的,反正最后所谓的主版本是比较低的0.23.0.0版本,nuget本地目录每次下载的都是这个主版本,然而,Mongodb.Driver.Core.dll要用的却是0.30.1.0这个高版本,于是就出现了【发现无法解析的“SharpCompress”的不同版本之间存在冲突】
最开始我是想看怎么能修改这个“主版本”,将其弄成0.30.1.0,但是无从下手,只能放弃
后来在网上看到一个办法,既然咱们控制不了第三方引用的版本,那么咱们就自己也get个SharpCompress来控制
具体操作是直接在冲突的项目中手动nuget这个SharpCompress,装载的时候选择0.30.1.0这个高版本
这样本地的nuget目录下就会出现0.30.1.0这个版本了,重新生成解决方案,之前的警告终于消失了
最后再吐槽下,vs2022不知道是刚出来还不稳定的问题还是以前版本就有这个问题
经常会出现明明nuget包已经更新了,但是发布后依然是旧版本的现象,以及一些其他莫名其妙的诡异现象
这个时候可以通过删除项目下的obj文件夹或者解决方案下的.vs文件夹来尝试解决问题
这2个文件夹删除后还能重新生成