无法加载文件或程序集“Newtonsoft.Json,版本=9.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一

Posted

技术标签:

【中文标题】无法加载文件或程序集“Newtonsoft.Json,版本=9.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一【英文标题】:Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies 【发布时间】:2016-12-04 22:16:17 【问题描述】:

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

最近我通过创建一个空白的 javascript Universal windows 10 项目将该项目升级到 Universal Windows 10,然后从旧项目中添加我的所有文件。

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

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

不知何故,我设法消除了所有构建错误。

我安装了所有必需的 SQLite-net、SQLite for Universal Windows Platform、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.

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 并重新安装它,但没有成功。

【问题讨论】:

不久前我在一个新的 ASP.NET Core 应用程序中遇到了类似的问题。结果发现其中一个引用的库使用了低于 9.0.0.0 的 Newtonsoft.Json 版本。所以我升级了那个库的版本,问题就解决了。不确定您是否可以在这里做同样的事情。 嗨@hbulens,我尝试安装最新版本,但一次又一次出现同样的错误。 可能与您的问题有关 - github.com/aspnet/Home/issues/1609 @hbulens 您应该发表您的评论作为答案。这解决了我的问题。 【参考方案1】:

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

【讨论】:

是的...我的也从 NuGet 重新安装后得到修复。 传奇!甚至在启动项目(这是一个控制台应用程序)中都没有引用或要求,但在我的类库中添加后修复了该问题 Daaanngg!我一天中的几个小时都被浪费了。希望我很久以前就看到过这个答案。谢谢!奇怪的是,我在启动项目中从未有过 Newtonsoft.Json,而且它已经工作了几个月。然后今天,它决定投诉。 为我们的 ASP.NET Core 1.0.1 Web 应用工作。将 Json.NET 添加到 Startup 类所在的项目中并且它可以工作。谢谢。 2021 年仍可使用 Newtonsoft .Json 13.0.0.0【参考方案2】:

从该解决方案的所有项目中删除所有 BIN 和 OBj 文件夹。此外,在使用时更新所有项目的包。删除 Package 文件夹并重建并运行。它对我有用。

【讨论】:

【参考方案3】:

当我将 Nuget 包 Newtonsoft.Json 12.0.0.2 添加到我的两个 .netstandard 库项目中时,我遇到了这个问题,它几乎占用了我一整天的时间来解决这个问题。

异常 -: 无法加载文件或程序集“Newtonsoft.Json,版本=12.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”。系统找不到指定的文件。

解决方案 -:我必须从 Nuget 中删除包并转到以下位置并执行后续步骤 -

步骤 1. 转到位置“C:\Users[UserName].nuget\packages\newtonsoft.json\12.0.2\lib” 在这里您将获得您之前安装的所有 Nuget 版本。

第 2 步。因为我想在我的 .netstandard 2.0 库项目中使用它,所以我从这个位置复制了“netstandard2.0”文件夹并粘贴到我喜欢的位置(**我通常保留第 3 方 dll 的位置)。

第 3 步。现在我将 DLL 引用从这里添加到我的两个项目中,这样问题就解决了。

谢谢

【讨论】:

【参考方案4】:

我通过从解决方案中删除所有 NuGet 包并重新安装它们来解决此问题。 其中一个 NuGet 包依赖于 NewtonSoft,它没有显示在参考文献中

【讨论】:

【参考方案5】:

我对以下版本 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 引起的。

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

【讨论】:

【参考方案6】:

我有一个非常相似的问题。我试图在 .NET DLL 中使用 Newtonsoft.Json.dll,就像我在计算机上的 .NET EXE 中成功使用它一样。我在 Visual Studio 2017 中使用 NuGet 将 Newtonsoft.Json 添加到 MyDll.dll。 MyExecutable.exe 引用 MyDll.dll。从 MyDll.dll 中的代码调用 Newtonsoft.Json 方法引发“System.IO.FileLoadException:无法加载文件或程序集'Newtonsoft.Json,版本 = 12.0.0.0,文化 = 中性,PublicKeyToken = 30ad4fe6b2a6aeed'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)“。

我运行了微软的 fuslogvw.exe https://docs.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer 来检查正在加载的内容,发现如下:

LOG: Post-policy reference: Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/MyExecutable/bin/Debug/Newtonsoft.Json.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\MyExecutable\bin\Debug\Newtonsoft.Json.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

MyExecutable.exe 没有对 Newtonsoft.Json 的引用或调用,但在我添加任何 Newtonsoft.Json 引用之前,我在我的 MyExecutable 源树副本的 bin\Debug 目录中找到了 6.0.0.0 Newtonsoft.Json.dll我的任何代码。我不知道为什么 6.0.0.0 Newtonsoft.Json.dll 在那里。也许它被 MyExecutable 引用的另一个 DLL 引用。我通过使用 NuGet 向 MyExecutable 添加对 12.0.0.0 Newtonsoft.Json 的引用来避免 FileLoadException。

我希望 MyExecutable 的 App.config 中的绑定重定向(如下图所示)可以替代 MyExecutable 引用 Newtonsoft.Json,但它不起作用。 …

【讨论】:

从上面继续:... 【参考方案7】:

在您的配置文件 (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) 正确或完全删除命名空间。

Assembly binding redirect does not work

【讨论】:

【参考方案8】:

需要更新 Newtonsoft.Json -Version 转到工具 => NuGet 包管理器 => 包管理器控制台 并在包管理器控制台窗口中键入 Install-Package Newtonsoft.Json -Version 12.0.2。

【讨论】:

【参考方案9】:

可以通过更新“Newtonsoft”版本来解决问题。

在 Visual Studio 2015 中,可以右键单击“解决方案”并选择“管理解决方案的 Nuget 包”,搜索“Newtonsoft”选择更新的版本并单击更新。

【讨论】:

【参考方案10】:

我认为 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)。 当编辑 app.config 或 web.config 不起作用时,这是一个很好的解决方案,尤其是。对于 Newtonsoft.Json,你使用的每个库都引用了这个该死包的旧版本【参考方案11】:

通过使用包管理器更新我的 Newton.Json 版本(旧版本 = 9.0.0.0 到新版本 11.0.0.0),我能够在我的 asp.net mvc 项目中解决这个问题。

【讨论】:

【参考方案12】:

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

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

【讨论】:

【参考方案13】:

就我而言,这是配置文件 web.config 的问题 当我更新牛顿版本时,在我的机器上 VS 自动修复了我的 web.config 文件以指向新版本。当我将它上传到生产环境时,现有的 web.config 指向的是旧版本。

一旦我更新了 web.config,它又开始工作了。

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

【讨论】:

【参考方案14】:

我正在使用 Visual Studio 2013 Update 2。就我而言,我在一个解决方案中有一个 Web 项目、一个 Web Api 项目和单元测试项目以及其他类库。

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

    右键单击 Web Api 项目。选择“设为启动项目” 右键单击 Web Api 项目。转到属性(Alt + Enter)。 在左侧菜单的应用程序选项卡上,选择应用程序 找到目标框架。将其更改为 4.5.1 并保存。但是,它在“错误列表”窗口中显示错误。重建后,没有错误。 删除所有 Newtonsoft.Json 包通过使用 Package Manager Console 中的以下查询(以获取它View > Other Window > Package Manager Console) .

卸载包 newtonsoft.json -force

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

安装包 newtonsoft.json

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

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

    为了解决这个问题,我们需要更新Package Manager Console。去

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

    更新 NuGet 包管理器扩展。按照之后的步骤进行操作。

    此后,Visual Studio 将进行一次重新启动

    再次执行步骤 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>

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

【讨论】:

【参考方案15】:

我的 ASP.NET Core 项目也遇到过类似的问题。 发生的情况是 bin/debug-folder 中的 .config 文件是这样生成的:

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

如果我手动将第二个 bindingRedirect 更改为此它可以工作:

<bindingRedirect oldVersion="9.0.0.0" newVersion="10.0.0.0" />

不知道为什么会这样。

我正在使用带有 .Net Core SDK 1.0.0-preview2-1-003177 的 Visual Studio 2015。

【讨论】:

【参考方案16】:

我也遇到了同样的问题,要解决这个问题,如果 Newtonsoft.Json 的版本已更新(可能没有),请检查您项目的 References,然后删除它并检查您的 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将被替换为正确的版本)

【讨论】:

【参考方案17】:

不久前,我在使用新的 ASP.NET Core 应用程序时遇到了类似的问题。结果发现其中一个引用的库使用了低于 9.0.0.0 的 Newtonsoft.Json 版本。所以我升级了那个库的版本,问题就解决了。不知道你是否可以在这里做同样的事情

【讨论】:

【参考方案18】:

我做了一个基本的Demo并重现了这个问题。似乎 WinRT 组件未能找到 Newton.Json 的正确程序集。临时解决方法是手动添加Newtonsoft.json.dll 文件。您可以通过以下步骤实现:

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

    重建您的运行时组件项目并运行。这个错误应该消失了。

【讨论】:

我在 linux mint 上使用 MonoDevelop,这对我有用,我在 Newtonsoft.json.9.0.1/lib 文件夹中的一个子文件夹中使用了一个便携式的 我还必须删除 NuGet 包引用。否则,它不允许我向 .dll 添加另一个链接。

以上是关于无法加载文件或程序集“Newtonsoft.Json,版本=9.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝

无法加载文件或程序集或其依赖项之一

寻找解决策略:无法加载文件或程序集[重复]