无法加载文件或程序集' Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项

时间:2016-07-30 07:49:55

标签: c# visual-studio win-universal-app windows-10 windows-10-universal

我有一个以前使用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运行时组件中调用Native方法时,它会产生一些奇怪的错误:

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版本是:

enter image description here

我尝试删除所有的Newtonsoft json并重新安装但没有运气。

18 个答案:

答案 0 :(得分:24)

我做了一个基本的演示并重现了这个问题。似乎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. 重建您的Runtime Component项目并运行。这个错误应该消失了。

答案 1 :(得分:18)

我通过将Newtonsoft.Json添加到启动项目的NuGet来解决了这个问题。

答案 2 :(得分:13)

我也有同样的问题,要解决此问题,请检查项目的参考,如果 Newtonsoft.Json 的版本已更新(可能没有),然后将其删除并检入 Web.config App.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 将替换为正确的版本)

答案 3 :(得分:6)

前一段时间我遇到了类似的新ASP.NET Core应用程序问题。事实证明,其中一个引用的库使用的Newtonsoft.Json版本低于9.0.0.0。所以我升级了该库的版本,问题解决了。不确定你是否能够在这里做同样的事情

答案 4 :(得分:6)

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

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

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

    uninstall-package newtonsoft.json -force

    1. 程序包管理器控制台重新安装 Newtonsoft.Json
    2.   

      install-package newtonsoft.json

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

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

        1. 要解决此问题,我们需要更新程序包管理器控制台
        2. 工具&gt;扩展程序和更新...&gt; 在左侧窗格中..选择更新&gt; Visual Studio Gallery

          1. 更新 NuGet Package Manager扩展程序。按照之后的步骤进行操作。

          2. Visual Studio将在此之后执行重新启动

          3. 再次执行第6步

          4. 安装完成后,将使用以下行添加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>
            

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

答案 5 :(得分:2)

我的ASP.NET核心项目遇到了类似的问题。 会发生什么是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" />

不确定为什么会这样。

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

答案 6 :(得分:2)

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

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

答案 7 :(得分:2)

我有一个非常相似的问题。我试图在.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,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)。

我运行Microsoft的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引用,但它不起作用。 …

答案 8 :(得分:2)

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

答案 9 :(得分:2)

在配置文件(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

答案 10 :(得分:1)

我认为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;
}

答案 11 :(得分:1)

我们花了一天时间来解决这个问题。解决方案是强制您的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>

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

在我的情况下,配置文件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>

答案 15 :(得分:0)

我通过从解决方案中删除所有NuGet软件包并重新安装来解决了此问题。 NuGet软件包之一依赖于NewtonSoft,并且未在参考文献中显示

答案 16 :(得分:0)

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

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

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

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

enter image description here

第2步。由于我想在.netstandard 2.0库项目中使用它,因此我从该位置复制了“ netstandard2.0”文件夹,然后将其粘贴到我的首选位置(**我通常保留第3方dll的位置)。

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

谢谢

答案 17 :(得分:0)

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

相关问题