Nethereum调用Wallet.GetAccount()出现EntryPointNotFound异常如何解决
Nethereum调用
Wallet.GetAccount()触发EntryPointNotFound异常的原因与修复方案 异常产生原因
- 依赖版本不兼容:这是最高发的触发原因,所有
Nethereum.前缀的相关依赖包版本不一致时,会出现调用链路断层。比如你引用的Nethereum.Wallet包是高版本,但依赖的Nethereum.Core、Nethereum.HdWallet是低版本,低版本核心依赖中不存在高版本Wallet包调用的入口方法,就会抛出该异常。 - 目标框架不匹配:如果你的项目目标框架低于Nethereum包要求的最低支持版本,比如.NET Framework项目低于4.6.1、.NET Core项目低于2.0,也会出现运行时入口点找不到的问题。
- 编译缓存异常:Nuget还原失败、本地编译缓存残留,会导致实际加载的dll版本和项目配置的版本不一致,运行时无法定位到对应方法入口。
- 调用方法不匹配:Nethereum 4.0及以上版本对
GetAccount()方法做了破坏性更新,旧版本的调用参数、调用路径在新版本中已经被移除,错误的参数类型或者调用路径也会触发该异常。
排查修复步骤
- 统一Nethereum依赖版本
打开项目的Nuget包管理器,将所有Nethereum.开头的包版本统一为同一个官方正式稳定版,禁止跨大版本混用不同Nethereum组件。 - 核对项目目标框架
确认项目的目标框架符合你使用的Nethereum版本的最低要求,若框架版本过低可升级项目目标框架,或者降级Nethereum到对应框架支持的版本。 - 清理缓存重新编译
按以下步骤清理残留缓存:- 在Visual Studio中右键解决方案,选择「清理解决方案」
- 手动删除项目根目录下的
bin、obj文件夹 - 清理本地Nuget缓存后重新还原所有依赖包,再重新编译项目
- 修正方法调用写法
不同版本的GetAccount()调用存在差异,根据你使用的版本调整写法:
4.0+版本如果传入int类型的索引,会因为重载匹配失败触发入口点找不到异常,强制转换为uint类型即可解决。3.x及更早版本写法:
var account = wallet.GetAccount(index); // index为int类型即可4.x及更高版本写法调整:
var hdWallet = new HdWallet(mnemonic, passphrase); var account = hdWallet.GetAccount((uint)index); // 索引参数必须为uint无符号整数类型
内容的提问来源于stack exchange,提问作者Malik Mehmood
相关产品推荐
相关产品推荐

