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

VB.Net项目JsonConvert未声明及Newtonsoft.Json版本冲突问题求助

问题描述

我正在处理一个使用Visual Studio 2019开发的VB.Net网站项目,项目中某类包含以下代码:

Dim asfPaymentInstalmentRequestJson As String = JsonConvert.SerializeObject(asfPaymentInstalmentRequest)

代码中JsonConvert被红色下划线标记,编译时抛出错误:

BC30451 'JsonConvert' is not declared. It may be inaccessible due to its protection level.

根据文档,JsonConvert属于Newtonsoft.Json库,我已安装13.0.1版本的NuGet包,并添加了导入语句:

Imports Newtonsoft.Json

项目同时引用了WorldpayNewtonsoft.Json 2.0.0.0,怀疑是版本冲突导致问题。

更新:手动将Newtonsoft.Json.dll复制到bin目录后,出现新的编译错误:

error BC30560: 'JsonPropertyAttribute' is ambiguous in the namespace 'Newtonsoft.Json'
error BC30661: Field or property 'PropertyName' is not found

显然两个版本的Newtonsoft.Json不兼容,但该项目在UAT环境可正常运行,需要解决本地开发环境的冲突问题。

解决方法

1. 清理并重新还原NuGet包

  • 右键项目 → 清理,删除bin和obj目录下的所有文件
  • 右键项目 → 管理NuGet程序包,确认Newtonsoft.Json 13.0.1已安装,卸载后重新安装
  • 打开工具 → NuGet包管理器 → 程序包管理器控制台,运行命令:
    Update-Package -reinstall Newtonsoft.Json
    
    让NuGet自动将正确版本的dll复制到bin目录,避免手动复制引发的版本不匹配。

2. 添加程序集绑定重定向

在项目的web.config文件的<runtime>节点下添加绑定重定向,强制项目使用指定版本的Newtonsoft.Json:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.1.0" />
    </dependentAssembly>
    <!-- 若UAT环境有WorldpayNewtonsoft.Json的重定向规则,同步添加 -->
  </assemblyBinding>
</runtime>

绑定重定向会让CLR忽略旧版本引用,统一使用指定的13.0.1版本。

3. 调整引用优先级与别名设置

  • 右键项目中的WorldpayNewtonsoft.Json引用 → 属性,将复制本地设为False(如果UAT环境未部署该dll,或依赖已包含在Worldpay相关组件中)
  • 为Newtonsoft.Json设置别名:右键Newtonsoft.Json引用 → 属性,在别名字段填写自定义名称(比如NewtonsoftMain)
  • 在代码文件顶部使用别名明确指定程序集:
    Imports NewtonsoftMain = Newtonsoft.Json
    
    后续代码中使用NewtonsoftMain.JsonConvert代替JsonConvert,避免命名空间歧义。

4. 对比UAT环境配置

  • 查看UAT环境的web.config文件,确认是否存在相同的绑定重定向规则
  • 检查UAT服务器bin目录下的dll版本,确保本地开发环境的dll版本与UAT完全一致
  • 确认UAT环境中是否同时存在两个版本的Newtonsoft.Json,以及它们的加载顺序

5. 排查间接依赖

在NuGet包管理器的已安装标签中,查看是否有其他依赖包间接引入了WorldpayNewtonsoft.Json,尝试更新这些依赖包到兼容Newtonsoft.Json 13.0.1的版本。

内容的提问来源于stack exchange,提问作者Colin Plater

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:45:12