Web API 项目在部署时不会运行 - 无法加载文件或程序集 'Newtonsoft.json,版本=4.5.0.0



当我部署我的MVC 5 WEB API项目时,我一直收到这个错误:

无法加载文件或程序集"Newtonsoft.Json,版本=4.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed'或其一个依赖关系。系统找不到指定的文件。

我遵循了这一点,重新安装了NuGet包"更新包Newtonsoft.Json-重新安装",但它没有工作。

这里有人知道可能出了什么问题吗?

检查对Newtonsoft.json DLL的引用,并确保它没有自动选择解决方案中packages文件夹之外的版本。

我的VS 2013不断在各种/program files (x86)/...文件夹中找到其他副本。它甚至忽略了将包版本DLL显式添加到项目中。必须更深入地挖掘,找出为什么会发生这种情况。。。

调查

我以文本编辑模式打开了项目.csproj文件,并搜索了对Newtonsoft.Json.的所有引用

事实证明,在我的csproj文件中,我对DLL的引用不是一个,而是两个(我不知道这是可能的)。其中一个引用了较旧的Newtonsoft.json 5.0.6(当前版本为5.0.8)

解决方案

我没有手动删除其中一个,而是将这个缺失的元素添加到第二个DLL中。我还将版本号更改为5.0.8:

  <Private>True</Private>

所以现在看起来像:

<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
  <HintPath>....CsQueryTestpackagesNewtonsoft.Json.5.0.8libnet45Newtonsoft.Json.dll</HintPath>
  <Private>True</Private>
</Reference>

Private是为DLL引用定义"本地复制"的设置。然后它再次开始在输出中包含DLL!

我会想办法从csproj文件中删除哪个,但目前,如果您有这个问题,这可能会让您继续。看起来原因可能是过去的NUGET更新。

您是否尝试在web配置中设置程序集重定向,以确保您的应用程序正在寻找正确的版本:

    <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"  culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
  </dependentAssembly>

管理整个解决方案的Nuget包,而不仅仅是项目。你应该在那里看到Newtonsoft.Json的多个版本。选择最低版本,然后选择"管理"。取消选中所有选中的复选框并确认。成功删除后,对任何其他较低版本重复此过程。当您只剩下一个最新版本的软件包时,请单击此软件包上的"管理",然后检查缺少该软件包的任何项目。一旦安装完成,就可以开始了。

Newtonsoft JSON的最新版本是5.0.8,这很可能是您通过NuGet重新安装得到的。

如果右键单击并查看Newtonsoft JSON dll引用的属性时,它显示5.0.8,则可以将"特定版本"设置为False,并且当前代码应该可以工作。

VS2013中的项目模板有一个非常烦人的习惯,它引用Newtonsoft.Json作为一个nuget包HOWEVER在引用属性"Copy Local"下,它被标记为False

将"复制本地"标记为

本质上,创建新项目->如果没有这个调整,部署就不会成功。

旁注:升级Newtonsoft.Json会将"复制本地"值更改为True。

相关内容

  • 没有找到相关文章

最新更新