首页新闻找找看学习计划

.NET Core nuget 包版本问题

1
悬赏园豆:50 [已解决问题] 解决于 2019-05-08 22:09

用的是 .net core 2.2 ,项目中引用的 EnyimMemcachedCore 包版本是 2.2.0-beta7 ,项目中引用的其他 nuget 包 引用的 EnyimMemcachedCore 包版本是 2.1.12 ,可以正常 build ,但运行时却报下面的错误:

System.IO.FileLoadException: Could not load file or assembly 'EnyimMemcachedCore, Version=2.1.12.0, Culture=neutral, PublicKeyToken=null'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'EnyimMemcachedCore, Version=2.1.12.0, Culture=neutral, PublicKeyToken=null'
   at System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType)

请问如何解决这个问题?

dudu的主页 dudu | 高人七级 | 园豆:41120
提问于:2019-05-08 18:34
< >
分享
最佳答案
0

终于找到原因了!竟然与 EnyimMemcachedCore 打包时所用的 .net core sdk 版本有关,打包 EnyimMemcachedCore 2.2.0-beta7 所用的 .net core sdk 版本是 2.2.100 (对应的 runtime 版本是 2.2.0),运行项目的 .net core runtime 版本是 2.2.4 ,用 .net core sdk 2.2.203(对应的 runtime 版本是 2.2.4)重新打包 EnyimMemcachedCore 为 2.2.0-beta8 ,安装这个新版本问题就解决了。

dudu | 高人七级 |园豆:41120 | 2019-05-08 22:07

今天找到了问题的真正原因,是打包的文件版本号引起的,详见 dotnet pack 打包文件版本号引起 "Could not load file or assembly" 问题

dudu | 园豆:41120 (高人七级) | 2019-05-17 14:37
其他回答(2)
0

我今天也遇到了类似的问题,解决办法是保持同个项目中引用其他包版本的同步,
比如 项目中我有一个工具类 包A 当前版本为 3.0.0,
B 包引用 A 包版本的 2.0.0 版本
C包 引用A 包版本的 3.0.0 版本

如果你的项目中都引用了 B 和C 包,编译时没问题,运行时就有问题了,我今天的解决办法就是先把无关的包给移除掉,第二就是更新 B包中的引用。
最坑的就是,很多包不归自己管,要是 Nuget 自动选择当前版本最新的包就好了。

收获园豆:50
BUTTERAPPLE | 园豆:2918 (老鸟四级) | 2019-05-08 20:12

在 .net core 中引用包的版本不兼容问题在编译时就能检测出来(详见博文),之前在运行时没碰到过这个问题

支持(0) 反对(0) dudu | 园豆:41120 (高人七级) | 2019-05-08 21:17
0

我最近也遇到了这个问题,我的解决办法是:

rm -rf ~/.nuget/packages

然后,清除掉 obj 跟 bin,最后重新 restore

不如隐茶去 | 园豆:524 (小虾三级) | 2019-05-08 22:10

我这次遇到的情况不一样,EnyimMemcachedCore 2.2.0-beta7 是刚发布的包,build 项目之前用 git clean -dfx 清理了

支持(0) 反对(0) dudu | 园豆:41120 (高人七级) | 2019-05-08 22:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册