无法加载文件或程序集“Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项。

60

我有一个使用VS 2013在Windows 8.1上构建的WinJS项目。

最近,我通过创建空的Javascript通用Windows 10项目并将旧项目中的所有文件添加到其中来将该项目升级为通用Windows 10。

我有Windows运行时组件和SQLite类库。

我添加了通用Windows运行时组件和通用类库,并将所有旧项目的文件复制到相应的位置。

我成功解决了所有构建错误。

我安装了所有必需的SQLite-net、Universal Windows Platform的SQLite、Newtonsoft等软件包。

但是当我运行应用程序并调用Windows运行时组件中的本地方法时,会出现某种奇怪的错误,如下所示:

An exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.ni.dll but was not handled in user code.

Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.

enter image description here

Newtonsoft版本为: 9.0.1

我的Windows运行时组件的project.json文件如下:

  {
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
    "Newtonsoft.Json": "9.0.1"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}

我的Visual Studio版本是:

在此输入图片描述

我尝试删除所有的Newtonsoft json并重新安装,但没有成功。


3
我之前遇到了一个新的ASP.NET Core应用程序的类似问题。结果发现其中一个被引用的库使用的Newtonsoft.Json版本比9.0.0.0低。因此,我升级了该库的版本,问题得到了解决。不确定您是否能在这里采取同样的措施解决问题。 - hbulens
嗨@hbulens,我尝试安装最新版本,但仍然会一遍又一遍地出现相同的错误。 - Kishor Bikram Oli
也许这个链接与你的问题相关 - https://github.com/aspnet/Home/issues/1609 - Sanket
25个回答

53

我通过将Newtonsoft.Json添加到启动项目的NuGet中解决了这个问题(即使它在启动项目中没有直接使用)。


4
传说!在启动项目中甚至没有被提及或需要(这是一个控制台应用程序),但一旦被添加到我的类库中,就解决了问题。 - Googs
7
哎呀!我白白浪费了好几个小时。但愿我早点看到这个答案。谢谢你!更奇怪的是,我的启动项目中从来没有 Newtonsoft.Json,但它已经正常工作了几个月。然后今天,它突然开始抱怨。 - Casey Crookston
2
已为我们的ASP.NET Core 1.0.1 Web应用程序工作。在Startup类所在的项目中添加了Json.NET,它很好地运行起来了。谢谢。 - ashilon
仍然能够在2021年使用Newtonsoft .Json 13.0.0.0。 - Jane S
对我有用,同时安装了最新的稳定版本。 - Gabe
显示剩余3条评论

39

我制作了一个基础的演示,并复现了这个问题。似乎WinRT组件无法找到正确的Newton.Json程序集。暂时的解决方法是手动添加Newtonsoft.json.dll文件。您可以按照以下步骤实现:

  1. 右键单击“引用”->“添加引用”->“浏览...”-> 找到C:\ Users \ .nuget \ packages \ Newtonsoft.Json \ 9.0.1 \ lib \ portable-net45 + wp80 + win8 + wpa81 \ Newtonsoft.json.dll->单击“添加”按钮。

  2. 重新构建您的运行时组件项目并运行。此错误应该已经被解决。


我在Linux Mint上使用MonoDevelop,这对我起作用了。我使用了其中一个便携式版本,在Newtonsoft.json.9.0.1/lib文件夹的一个子文件夹中。 - isebarn
我还必须删除NuGet软件包引用。否则,它将不允许我添加另一个.dll的链接。 - Artemious

21

我也遇到了同样的问题,为了解决这个问题,请检查您项目中的参考文献,确认Newtonsoft.Json版本是否更新(可能没有),然后删除它,并检查您的Web.configApp.config文件中是否将元素dependentAssembly更新如下:

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

之后,重新构建该项目dll将被替换为正确的版本)。


12

我正在使用 Visual Studio 2013 Update 2。在我的情况下,我有一个 Web 项目、一个 Web Api 项目、一个单元测试项目以及其他类库组成的单一解决方案。

我花费了几天时间来解决这个问题。以下是我找到的逐步解决方案。

  1. 右键单击 Web Api 项目。选择“设置为启动项目
  2. 右键单击 Web Api 项目。转到 属性( Alt + Enter )。
  3. 在左侧菜单的应用程序选项卡中,选择 应用程序
  4. 找到 目标框架。将其更改为 4.5.1 并保存。但是,在“错误列表”窗口中出现错误。重建后,没有错误。
  5. 通过从包管理器控制台使用以下查询从解决方案中删除所有 Newtonsoft.Json 套件(获取它的方法为 查看 > 其他窗口 > 包管理器控制台 )。

uninstall-package newtonsoft.json -force

  1. 重新安装 Newtonsoft.Json,从 包管理器控制台

install-package newtonsoft.json

  1. 如果您拥有 Visual Studio 2013 的最新更新,则可能不会遇到此问题。由于我正在使用 Update 2,因此在尝试安装 Newtonsoft.Json 时,我遇到了以下错误。

“Newtonsoft.Json 10.0.3”包需要 NuGet 客户端版本“2.12”或以上,但当前的 NuGet 版本是“2.8.50313.46”

  1. 为解决此问题,我们需要更新 包管理器控制台。进入

工具 > 扩展和更新... > 在左侧窗格中选择更新 > Visual Studio Gallery

  1. 更新 NuGet 包管理器扩展。按照随后出现的步骤操作。

  2. 之后,Visual Studio 会重启一次。

  3. 再次执行第6步

安装后,packages.config 将添加以下行

  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net451" />
安装后,将添加以下内容到 web.config 文件中。
<dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>

如果没有其他错误,它将成功执行。


7

我之前在一个新的ASP.NET Core应用程序中遇到了类似的问题。结果发现被引用的库使用的Newtonsoft.Json版本低于9.0.0.0。所以我升级了那个库的版本,问题得到解决。不确定你是否能够在此处做同样的事情。


6
在你的配置文件(web.config)中添加Newtonsoft.Json的绑定重定向配置将解决该问题。
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">   
            <dependentAssembly>
                <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

在你的情况中,由于Newtonsoft.Json版本为9,请在配置中适当更新版本。

如果此配置不起作用,请确保配置标记中的命名空间(xmlns)正确或完全删除名称空间。

程序集绑定重定向不起作用


5
我认为AutoCAD把我的东西给劫持了。对我有效的解决方案是重新劫持回来。我从 https://forums.autodesk.com/t5/navisworks-api/could-not-load-file-or-assembly-newtonsoft-json/td-p/7028055?profile.language=en 得到了这个方法 - 是的,互联网运作方式很神秘。
// in your initilizer ...
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

.....

private Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
{
    if (args.Name.Contains("Newtonsoft.Json"))
    {
        string assemblyFileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Newtonsoft.Json.dll";
        return Assembly.LoadFrom(assemblyFileName);
    }
    else
        return null;
}

非常棒的东西,特别是在处理大量依赖项时非常有用,其中一个依赖项需要当前不可用的某个版本(例如Newtonsoft.Json 11.0.0)。 - Vitalii Vasylenko
当编辑app.config或web.config无效时,这是一个很好的解决方案,特别是对于Newtonsoft.Json,其中您使用的每个库都引用了该该死的包的旧版本。 - Ambrose Leung

3

我遇到了与以下版本12.0.3相同的问题:

Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.

此问题仅出现在我的测试项目(xUnit)中,并由于该项目缺乏 newtonsoft.json 而导致。

重要的是,我正在测试来自另一个附加了该库且正常工作的项目中的代码。


3

我们花了一天时间解决这个问题。解决方案是在您的web.config文件中强制使用版本11.0.0来使用您的Web服务。

<runtime>      
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
  </dependentAssembly>
</assemblyBinding>


2

需要更新 Newtonsoft.Json -Version,请按照以下步骤操作:前往“工具” => “NuGet 包管理器” => “程序包管理器控制台”,在控制台窗口中输入 Install-Package Newtonsoft.Json -Version 12.0.2。

注意:保留html标签。

最初的回答已被翻译成易懂的中文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接