我对我的项目进行了一些更改,需要将Newtonsoft更新到10.0.2版本。我的项目在本地运行良好,但是当我尝试通过 Jenkins 在我的测试环境中构建它时,构建失败并且站点抛出 500 错误:
无法加载文件或程序集"Newtonsoft.Json,版本=6.0.0.0,区域性=中性,公钥令牌=30ad4fe6b2a6aeed"或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的例外:0x80131040)
当我运行nuget安装软件包时,对Newtonsoft.Json的更改是在三个文件中进行的:src/MySite.Library/packages.config,web/Website/packages.config和web/Website/MySite.csproj:
packages.config:
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
csproj:
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>....packagesNewtonsoft.Json.10.0.2libnet45Newtonsoft.Json.dll</HintPath>
我尝试修改 web.config 以查看是否可以修复 500 错误,因为我注意到它仍在使用旧版本:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
我把它改成了
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.2" />
</dependentAssembly>
在我更改 web.config 之前,错误说"无法加载文件或程序集'Newtonsoft.Json,版本=4.5.0.0"。当我将配置更改为 10.0.2 时,它现在显示"无法加载文件或程序集'Newtonsoft.Json,版本=6.0.0.0">
这是我以前遇到过的问题。 Newtonsoft实际上从未将次要版本号放在其汇编中。 只需将新的绑定重定向更改为:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
我运行了Update-Package –reinstall Newtonsoft.Json
,并更新了几个以前未更改的app.config文件。一旦我使用较新的Newtonsoft.Json版本签入更新的app.config文件,构建成功。