部署时,Web API项目将无法运行 - 无法加载文件或程序集'Newtonsoft.Json,Version = 4.5.0.0

时间:2013-12-05 16:27:13

标签: c# asp.net-mvc json json.net visual-studio-2013

我在部署MVC 5 WEB API项目时遇到此错误:

  

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

我已经关注this并重新安装了NuGet包“Update-Package Newtonsoft.Json -Reinstall”,但它没有用。

有没有人知道可能出现什么问题?

5 个答案:

答案 0 :(得分:6)

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

    <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>

答案 1 :(得分:6)

检查对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>..\..\CsQueryTest\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
  <Private>True</Private>
</Reference>

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

我将弄清楚要从csproj文件中删除哪些文件,但是现在如果遇到这个问题,这可能会让你感到高兴。看起来原因可能是过去的NUGET更新。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

VS2013中的项目模板有这个非常烦人的习惯,它将参考属性&#34;复制本地&#34;引用Newtonsoft.Json作为nuget包 HOWEVER 。它标记为 False

马克&#34;复制本地&#34;到真实

基本上创建新项目 - &gt;没有这个调整,部署不会解决问题。

旁注: 升级Newtonsoft.Json会将Copy Local值更改为True。