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

JsonPatch.Net.dll在Windows pwsh正常运行,Linux环境下报错

问题诊断与修复方案

核心问题分析

Windows环境(pwsh 7.4)下可正常运行的Minimal.ps1脚本,在Linux Docker容器中执行时出现Json.Patch.PatchJsonConverter类型无法解析的错误,且依赖的Json.More.Net、JsonPointer.Net等DLL加载失败,仅Humanizer.Net能正常加载。这本质是Linux与Windows下.NET程序集加载机制的差异,加上手动提取NuGet包时可能遗漏依赖或加载顺序错误导致的。

修复步骤

1. 补全所有依赖DLL

从JsonPatch.Net 3.2.3及其所有依赖NuGet包(Json.More.Net、JsonPointer.Net等)的lib/net8.0目录中,将所有DLL完整复制到脚本的lib目录,确保没有遗漏任何依赖组件。

2. 按依赖顺序显式加载DLL

PowerShell在Linux下不会自动递归解析程序集依赖,需按依赖层级顺序加载所有DLL,修改脚本如下:

# 按依赖优先级加载所有必需DLL
$requiredDlls = @(
    "$PSScriptRoot/lib/Json.More.Net.dll",
    "$PSScriptRoot/lib/JsonPointer.Net.dll",
    "$PSScriptRoot/lib/JsonPatch.Net.dll",
    "$PSScriptRoot/lib/Humanizer.Net.dll"
)

foreach ($dll in $requiredDlls) {
    Add-Type -LiteralPath $dll
}

$ErrorActionPreference = "Stop"
[System.Text.Json.JsonSerializer]::Deserialize[Json.Patch.JsonPatch]("[]")

3. 验证DLL跨平台兼容性

确认所有提取的DLL均为net8.0跨平台版本,无Windows专属编译文件。可在容器内运行dotnet dump inspect [DLL路径]查看目标框架信息。

4. 改用NuGet自动还原依赖(推荐)

在Docker容器内通过dotnet add package JsonPatch.Net --version 3.2.3自动安装所有依赖,脚本中直接引用NuGet默认安装路径的DLL,避免手动提取出错:

# 引用NuGet自动安装的依赖DLL
$nugetRoot = "$HOME/.nuget/packages"
$jsonMoreDll = "$nugetRoot/json.more.net/3.2.0/lib/net8.0/Json.More.Net.dll"
$jsonPointerDll = "$nugetRoot/jsonpointer.net/3.2.0/lib/net8.0/JsonPointer.Net.dll"
$jsonPatchDll = "$nugetRoot/jsonpatch.net/3.2.3/lib/net8.0/JsonPatch.Net.dll"

Add-Type -LiteralPath $jsonMoreDll, $jsonPointerDll, $jsonPatchDll

$ErrorActionPreference = "Stop"
[System.Text.Json.JsonSerializer]::Deserialize[Json.Patch.JsonPatch]("[]")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:53:16