Visual Studio发布网站在IIS10中报“JObject未定义”错误求助
解决“Type 'JObject' is not defined”错误方案
核心问题定位
问题根源在于服务器上Newtonsoft.Json程序集未被正确识别和加载:Bin目录中无.dll扩展名的Newtonsoft.Json文件干扰了IIS对真实程序集的查找,同时GAC注册操作存在参数错误。
分步解决步骤
1. 清理Bin目录无效文件
- 登录Windows Server Core服务器,找到网站的Bin目录
- 删除无.dll扩展名的
Newtonsoft.Json文件,避免系统将其误识别为JSON文件,干扰程序集加载流程 - 确保Bin目录仅保留正确的
Newtonsoft.Json.dll(版本13.0.3.27908)
2. 修正GAC注册操作
gacutil -l命令参数错误,正确操作如下:
- 以管理员权限打开命令提示符
- 切换到
Newtonsoft.Json.dll所在目录,执行注册命令:gacutil -i Newtonsoft.Json.dll - 验证注册结果,执行查询命令(无需带
.dll后缀):
成功注册后会显示对应版本的程序集信息gacutil -l Newtonsoft.Json
3. 配置IIS网站加载设置
- 打开IIS管理器,定位目标网站,进入高级设置
- 确认启用32位应用程序选项与项目编译架构匹配(若项目为32位编译,需勾选此选项)
- 重启IIS服务使配置生效:
iisreset
4. 修正本地发布配置
- 在Visual Studio中右键项目,进入属性→生成,确认目标平台与服务器架构一致(x86/x64/Any CPU)
- 打开发布设置,选择文件系统发布方式,确保未勾选可能导致程序集丢失的异常编译选项
- 重新发布项目到服务器,覆盖Bin目录
5. 代码层面排除冲突
确保命名空间引用无误,可尝试添加完整命名空间限定避免冲突:
Imports Newtonsoft.Json.Linq Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Dim json As String = New System.Net.WebClient().DownloadString("https://reqres.in/api/products/3") ' 使用完整命名空间限定JObject Dim parsejson As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(json) Dim thename = parsejson.SelectToken("data.name").ToString() txt1.Text = "Name Is " + thename End Sub End Class
额外排查点
- 确认服务器安装的.NET Framework版本与项目目标框架一致
- 检查IIS应用程序池的.NET CLR版本配置是否匹配项目要求
内容的提问来源于stack exchange,提问作者CodingEE
相关产品推荐
相关产品推荐

