【问题标题】:Visual Studio 2012 Web API project won't run - can't find Newtonsoft.JsonVisual Studio 2012 Web API 项目无法运行 - 找不到 Newtonsoft.Json
【发布时间】:2012-08-15 04:27:57
【问题描述】:

运行干净的解决方案并重建后,我的 MVC 4 Web API 项目停止工作。找不到 Newtonsoft.Json。

我知道 MS 现在正在使用它作为默认 JSON 序列化程序 - 但它不在项目的引用列表中,我无法从 NuGet 添加它,因为它说它已经安装。

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

完整的堆栈跟踪:

[FileNotFoundException: 无法加载文件或程序集 'Newtonsoft.Json,版本=4.5.0.0,文化=中性, PublicKeyToken=30ad4fe6b2a6aeed' 或其依赖项之一。这 系统找不到指定的文件。]
d:\Data\Source 中的 MvcWebRole1.WebApiApplication.Application_Error() 受控 项目\georace\georace\Server\GeoRaceServer\MvcWebRole1\Global.asax.cs:70

[HttpException (0x80004005): 无法加载文件或程序集 'Newtonsoft.Json,版本=4.5.0.0,文化=中性, PublicKeyToken=30ad4fe6b2a6aeed' 或其依赖项之一。这 系统找不到指定的文件。]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication 应用程序)+12838633
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext、HttpContext 上下文、MethodInfo[] 处理程序)+175
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态, MethodInfo[] 处理程序、IntPtr appContext、HttpContext 上下文)+304
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext 上下文)+404
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): 无法加载文件或程序集 'Newtonsoft.Json,版本=4.5.0.0,文化=中性, PublicKeyToken=30ad4fe6b2a6aeed' 或其依赖项之一。这 系统找不到指定的文件。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+12851296 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +159 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+12679949

【问题讨论】:

    标签: c# visual-studio-2012 asp.net-web-api


    【解决方案1】:

    好的 - 在我自己周围找到了一个工作,发布以防其他人被这个 MS 错误鞭打。 问题是您无法添加 NuGet 引用,因为默认情况下它已包含在包中。所以...

    1. 打开 packages.config
    2. 删除 Newtonsoft.Json 条目。
    3. 保存并构建
    4. 从 NuGet 重新添加 Newtonsoft.Json。
    5. 构建并运行

    【讨论】:

    • 您也可以在包管理器控制台中输入:Update-Package Newtonsoft.Json -Reinstall
    • 这适用于我的开发,但发布到服务器时仍然存在相同的错误。
    • @RubensMariuzzo 我在哪里可以找到 VS 2012 中的包管理器控制台
    • @theB3RV,从菜单栏中转到:Tools,选择Library Package Manager,然后单击Package Manager Consoledocs.nuget.org/docs/start-here/…
    • @theB3RV 在菜单栏上,查看->其他窗口->包管理器控制台。
    【解决方案2】:

    对于任何已经由 NuGet 安装的包,您要重新安装,只需在 包管理器控制台中键入以下命令:

    在任何项目中更新:

    Update-Package Newtonsoft.Json -Reinstall
    

    在特定项目中更新

    Update-Package Newtonsoft.Json -Reinstall -Project My.App
    

    【讨论】:

    • 请注意,您需要更新版本的 NuGet 才能使用“-Reinstall”参数。我认为version must be >= 2.1 否则它无法识别您的命令。
    【解决方案3】:

    对我来说,修复此错误的唯一方法是将缺少的部分添加到我的 web.config 文件中,我从这里的答案中得到:https://stackoverflow.com/a/20414714/940783

    这是我需要补充的:

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

    【讨论】:

      【解决方案4】:

      我结合了其他 SO 贡献者所说的几个选项,以及一个新选项。

      首先,事实证明 Nuget 2.1 存在一些问题,这个问题被记录在一个错误中,并在 2.2.2 中得到修复。见这里:https://nuget.codeplex.com/workitem/3050

      所以,我做了以下步骤:

      1. 根据链接将 Nuget 版本更新为 2.2.2
      2. 通过从 NUget 卸载删除了我项目中对 Json 的所有引用(右键单击项目并找到包,然后卸载(甚至 这没有这样做)
      3. 从计算机中物理删除了包文件。我在这里找到了包文件://projectdir/packages/Newtonsoft.JSON
      4. 已从物理目录 (//projectname/packages.config) 中删除 packages.config 文件
      5. 这一切都完成后,我通过 Nuget 再次添加了 Newtonsoft,然后进行了重建,它成功了。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题(在 VS2012 中)。没有答案对我有帮助。最后我解决了这个问题:

        1) 转到工具 -> 扩展和更新 在这里更新(或安装)“NuGet 包管理器” 接下来转到“在线”并安装“快速添加 NuGet”和“NuGet 引用”

        2) 全部安装后 1) 在您的项目中右键单击“参考”并选择“管理 Nuget 包” 在“已安装的包”中找到 Json.NET。单击卸载 - 您现在无法执行此操作,但它会显示您必须首先卸载的内容(某些 ASP Web Api 客户端)。所以卸载所有这些并再次尝试卸载“Json.NET”。 现在转到“在线”并安装“Json.NET”、“ASP.NET WEB API 客户端库”和“ASP.NET WEB API 客户端 OData”。

        3) 在 Global.asax 中删除行“WebApiConfig.Register(GlobalConfiguration.Configuration);”

        构建解决方案,一切都应该没问题.. 我希望这可以帮助某人:) gl

        【讨论】:

        • 对我不起作用。实际上,这让事情变得更糟,因为版本无法相互解决。
        • 它在我的情况下工作,然后我评论了第三步,我得到一个错误 'The type initializer for 'System.Web.Http.GlobalConfiguration' throw an exception' 。为此,我转到包管理器控制台并从链接stackoverflow.com/questions/19091195/… 中键入 Install-Package Microsoft.AspNet.WebApi -IncludePrerelease 并且它有效。谢谢你。
        • 这解决了我所有的问题,结束了一整天的沮丧,谢谢!
        【解决方案6】:

        检查您是否有对 JSON.NET 的“旧样式”(nuget 前)引用指向您的项目中嵌入的过时本地副本。

        我有一个旧的Reference\Lib\JSON.NET,它在我的参考路径中并获得优先权。

        检查 JSON.NET 属性页面是否指向预期的 Nuget 包版本。

        我在实时部署的 Team Server 构建中遇到了这个问题。我必须修复我原来的解决方案并进行干净的构建,以确保旧的Reference\Lib\ DLL 没有被拾取。

        【讨论】:

        • 成功了!在我的情况下,它是一个间接引用,引用了我自己的库,该库具有“旧式”JSON.NET 引用。所以要解决,我必须在我的库中添加一个 Nuget 包。
        • @uwe great :-) 请注意,您甚至不需要在 .csproj 文件中包含它 - 它只需要在参考路径文件夹中
        【解决方案7】:

        在我的情况下,我检查了一个同事的项目,该项目以某种方式使我的 Newtonsoft.Json 引用变坏了 - 所以我不得不删除它。右键单击项目-> 管理 NuGet 包。在左侧单击“Installed Packages”,然后选择 Json.NET 并卸载它。在我的情况下,我还必须卸载其他依赖包(Microsoft ASP.Net Web API 和其他)。选择左侧“在线”,搜索Json.Net,重新安装。

        【讨论】:

          【解决方案8】:

          我遇到了相同的 FileNotFoundException,事实证明我的项目中已经引用了 Newtonsoft.Json,但是“复制本地”属性未设置为 TRUE。 只需将其设置为 TRUE,这样 dll 就会被复制到输出目录(如果您也是如此)。

          【讨论】:

            【解决方案9】:

            我测试了这里所说的所有内容,但没有任何效果。就我而言,我有一个这样的路径文件夹。

            • #Projects/Web/App/...

            #我的问题的原因。我删除了 # 并且工作正常。

            【讨论】:

              【解决方案10】:

              导致我对 Newtonsoft.json 出现问题的原因略有不同。我开发了一个针对 .Net 4.5 构建的 Windows 应用程序。后来发现客户的环境只支持.Net 4.0。我已将解决方案复制到一个新区域以保留 .Net 4.5 的工作并将解决方案属性更改为 Microsoft.Net 4.0。我得到了 Newtonsoft.json 找不到的错误,我错过了一个参考。

              我按照上述程序删除了 packages.config;删除 Newtonsoft.json;确保 Newtonsoft.json 已从 \packages 目录中删除;然后从 NuGet 重新安装 Newtonsoft.json。我能够使用 .Net 4.0 编译和运行应用程序

              在此之前,packages.config 文件显示 Newtonsoft.json 所针对的 .Net 版本是 .Net 4.5。现在删除和添加 Newtonsoft.json 的目标是 .Net 4.0。

              【讨论】:

              • 我“认为”(未经测试)您只需将 packages.xml 中的 targetFramework 属性从“net45”更改为“net40”即可获得相同的效果(假设您安装了两个版本)。
              【解决方案11】:

              我做错了,它自己整理得很好。

              在开始了一个新的 VS 2012 项目后,我使用 NuGet 安装 Newtonsoft.JSON,因为已经安装了 4.5.6 版,看到它被卸载并安装了 4.5.10 给我留下了深刻的印象。

              甜。

              【讨论】:

                【解决方案12】:

                您可以尝试使用 ‑IgnoreDependencies 标志安装 SocialAuth.Net 包,然后手动安装依赖项并确保仅安装最新版本的 Json.Net 库。

                然后在运行时 SocialAuth.Net 包将尊重程序集重定向并加载 Json.Net (v4.5) 而不是旧版本。

                【讨论】:

                  【解决方案13】:

                  我在 VS2012 express 中遇到了同样的问题,我设法从

                  安装它

                  工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包

                  在那里我找到并安装了 Newtonsoft Json。到那时,它还没有安装在解决方案的任何项目中。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-08-28
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-02-27
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多