You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XeroClient调用RefreshAccessTokenAsync报Method not found如何解决

运行时方法找不到异常(Xero令牌刷新场景)排查方案

问题复现场景

执行以下令牌刷新代码时触发运行时异常:

XeroToken = Await c.RefreshAccessTokenAsync(XeroToken).ConfigureAwait(False)

异常详情:

Method not found: 'System.Threading.Tasks.Task`1<IdentityModel.Client.TokenResponse> IdentityModel.Client.HttpClientTokenRequestExtensions.RequestRefreshTokenAsync(System.Net.Http.HttpMessageInvoker, IdentityModel.Client.RefreshTokenRequest, System.Threading.CancellationToken)'

对应业务逻辑:

Dim c = New XeroClient(XeroConfig)
...
Dim utcTimeNow = DateTime.UtcNow
If utcTimeNow > Me.XeroToken.ExpiresAtUtc Then
   XeroToken = Await c.RefreshAccessTokenAsync(XeroToken).ConfigureAwait(False)
   Dim json = New JavaScriptSerializer().Serialize(XeroToken)
   Dim token As String = Me.SaveToken(json)
End If

已完成的前置排查:

  • 已确认项目不存在同一NuGet包的多版本显式引用
  • 已清理解决方案、删除bin/obj目录后重新生成,项目可正常构建部署,异常仍复现
  • 近期团队更新Visual Studio版本后曾出现大面积包引用、编译错误,目前显性编译错误已全部修复,表面功能可正常运行

根因说明

这是典型的程序集版本不匹配导致的MissingMethodException:你引用的Xero OAuth2客户端包是基于特定版本的IdentityModel编译的,编译时依赖的3参数RequestRefreshTokenAsync扩展方法签名存在,但运行时实际加载到的IdentityModel.dll是不兼容的其他版本(跨大版本升级时IdentityModel曾修改过这个方法的签名,移除/调整了对应重载),因此运行时找不到匹配方法。
VS更新后NuGet缓存损坏、间接依赖版本未统一、绑定重定向配置残留,都可能导致“编译正常但运行时加载错版本dll”的问题,NuGet包管理器的“无版本冲突”提示在这类场景下经常漏判,不能作为判断依据。

修复步骤

按顺序操作即可解决:

  1. 确认依赖版本匹配要求
    查看当前项目安装的Xero.NetStandard.OAuth2包的依赖说明,找到它要求匹配的IdentityModel主版本号,必须使用该主版本范围内的IdentityModel,禁止跨大版本升级,这是这类异常最高发的诱因。
  2. 全解决方案统一IdentityModel版本
    遍历解决方案下所有项目,不管是直接引用还是间接依赖IdentityModel,全部统一安装和Xero包要求完全一致的IdentityModel版本,关闭NuGet版本浮动配置。
  3. 修正程序集绑定重定向配置
    右键启动项目选择「添加程序集绑定重定向」,打开启动项目的web.config/app.config,检查<runtime><assemblyBinding>节点下的IdentityModel配置:
    • 确认重定向规则覆盖所有旧版本,重定向的目标版本和你实际安装的版本完全一致,删除残留的旧版本重定向规则
    • 可添加codeBase配置强制运行时从bin目录加载指定版本dll,避免加载GAC或其他共享目录下的不兼容版本,配置示例如下:
    <dependentAssembly>
      <assemblyIdentity name="IdentityModel" publicKeyToken="e78773a1390e2292" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      <codeBase version="6.0.0.0" href="bin/IdentityModel.dll" />
    </dependentAssembly>
    
    注意将示例中的版本号替换为你实际安装的正确版本号
  4. 校验输出目录实际dll版本
    重新生成项目后,进入启动项目的bin输出目录,找到IdentityModel.dll,右键查看「属性-详细信息」,确认文件版本和你NuGet安装的版本完全一致。如果版本不对,手动删除该dll后重新执行NuGet还原、项目生成。
  5. 清理运行环境缓存
    如果是IIS部署场景,删除站点对应bin目录、系统盘下Temporary ASP.NET Files目录中对应站点的缓存文件后重新部署,避免旧版本dll被IIS缓存加载。

内容的提问来源于stack exchange,提问作者Ivan Gechev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:45:31