无法加载文件或程序集 'Newtonsoft.Json' 版本=11.0.0.0。

22
我已经阅读了之前这个问题的许多回答,但是似乎都不起作用。
每次我在 Visual Studio 2015 (v14.0.25431.01 update 3) 中打开我的脚本组件时,它告诉我我缺少对 Newtonsoft.Json 的引用。于是我进入 NuGet 包管理器,它要求我还原,我就这样做了,并说还原成功。
然后我保存并尝试运行我的 SSIS 包,但出现以下错误:
“无法加载文件或程序集“Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或其某一个依赖项。系统找不到指定的文件。”
我的 packages.config 文件如下所示。
    <?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net45" />
</packages>

我的app.config文件如下所示。

<?xml version="1.0" encoding="utf-8"?>
<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-11.0.0.0" newVersion="11.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

我可以导航到它正在寻找的文件夹并查看.dll文件。

C:\Users\lp1.db\AppData\Local\Temp\Vsta\SSIS_SC130\VstaGbmf__V5kCUWonnRT2qrG_g\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll

还有其他人遇到过这个持续的问题吗,即使已经设置好,它也无法找到该文件。


1
@Hadi 我不确定你删除了 Visual Studio 标签是否正确。 你确定这与 Visual Studio(或可能是 NuGet)无关吗? - Alex Telon
我认为问题在于,如果你的项目是NET 4.6.2,那么你应该使用9.0.1版本。如果你想使用更新的版本,你应该将你的项目升级到NET 4.7.2 - 我认为这与NET STANDARD 1.6到2.0的转换有关。 - Piotr Kula
8个回答

8

在所有项目中删除对Newtonsoft.Json的引用。

前往Nuget包管理器(右键单击解决方案),下载Newtonsoft.Json最新版本并选择所有项目使用它,并重新安装它。

确保packages.config具有最新版本:

<packages>
  <package id="Newtonsoft.Json" version="11.0.2" targetFramework="net461" />
</packages>

重新构建解决方案。

3

这是.NET项目中最常见的问题之一。基本上,有人直接引用了本地程序集,而没有通过NuGet管理包,或者该项目是在不同的.NET版本中编译的。 解决此问题的最佳方法是在项目引用中定位引用,将其删除,清理项目,检查DLL是否已经消失,最后使用NuGet重新制作引用。


1

尝试清理您的项目。

在Visual Studio中清理项目

如果这不起作用,请删除引用下的引用。将dll文件保存在bin文件夹中,然后再次添加它。浏览您的文件,选择它,然后点击确定。


0
尝试将NewtonSoft.Json复制到SQL SSIS运行时文件夹中。
C:\Program Files (x86)\Microsoft SQL Server\[SQL Server version]\DTS\Binn

示例(SQL Server 2016)

C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn

尝试将dll文件复制到外部文件夹。删除引用,然后从该文件夹重新添加。 - Hadi

0

我曾经遇到过类似的问题,当我在同一个解决方案中有两个不同的项目时,其中一个引用了11.0.2版本,另一个引用了6.0.4版本。如果是这种情况,请尝试让它们使用相同的版本并重试。


0

将 Newtonsoft.Json.dll 和 Newtonsoft.Json.xml 复制粘贴到您的构建/发布或构建/调试中,以部署 ProjectFolder


0
我强制卸载了版本为13的newtonsoft.json(必须进入插件的NuGet窗口内的设置)。然后出现了大量错误,我重新安装了它。所有错误都消失了,我重新运行程序,这次通过了版本错误测试。

0

最佳答案在这里:无法加载文件或程序集“Newtonsoft.Json,版本=9.0.0.0,文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed”或其某个依赖项

    public static void SetBindingRedirect()
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
    }

    private static 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;
    }

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