Nancy SelfHost集成DryIoc Bootstrapper时遭遇方法未找到异常
解决Nancy SelfHost + DryIoc集成时的MissingMethodException问题
这个问题我之前帮同行排查过,90%以上是DryIoc核心库和Nancy的DryIoc集成包版本不兼容导致的。System.MissingMethodException这种错误,说白了就是你引用的某个库更新后改了方法签名,但调用它的另一个库还在找旧版本的方法,自然就找不到了。
具体排查和解决步骤:
- 先核对NuGet包版本:
一定要确保DryIoc核心包和Nancy.Bootstrappers.DryIoc包的版本完全对应。比如你要是装了DryIoc v5.x,那Nancy的DryIoc引导包也得是支持v5.x的版本,不能一个用v4一个用v5——我之前就踩过这个坑,自动更新NuGet把DryIoc更到最新,结果Nancy的集成包没跟上,直接报这个错。 - 清理缓存重新还原:
有时候本地NuGet缓存会搞鬼,先删掉项目根目录的packages文件夹(如果是用packages.config的老项目),或者用命令清掉全局缓存:dotnet nuget locals all --clear。然后重新还原包,确保所有依赖都是配套的。 - 先简化测试:
暂时把Topshelf的托管逻辑去掉,写个最简单的控制台程序直接启动NancyHost,传入默认的DryIocNancyBootstrapper实例,看看还会不会报错。如果去掉Topshelf就正常,那可能是Topshelf的依赖和DryIoc冲突,但这种情况很少见,优先还是先搞定DryIoc和Nancy的版本问题。 - 检查你的Bootstrapper代码:
虽然你说只是继承了DryIocNancyBootstrapper并覆写了空方法,但可以先把所有覆写的方法注释掉,直接用默认的引导器试试。万一你不小心在覆写的方法里调用了DryIoc的过时API,也可能触发这个问题。
亲测有效的兼容版本组合:
给你个我之前用过的稳定版本组合,你可以先试试:
DryIocv4.12.0Nancyv2.0.0-clinteastwoodNancy.Bootstrappers.DryIocv2.0.0-clinteastwoodNancy.Hosting.Selfv2.0.0-clinteastwoodTopshelfv4.3.0
这些版本搭在一起完全没问题,你可以先切换到这个组合验证下,要是问题解决了,再慢慢升级到更高的兼容版本。
小提醒:遇到这种方法找不到的异常,第一反应就是查版本兼容性,尤其是第三方库的集成包,一定要和核心库版本对齐!
内容的提问来源于stack exchange,提问作者Hairydruidy
相关产品推荐
相关产品推荐

