无法加载文件或程序集“Newtonsoft.Json”或其依赖项之一。清单定义与程序集引用不匹配

时间:2014-03-27 10:57:49

标签: json json.net .net-assembly

搜索后我尝试过的事情:

    Web中的
  1. .Config对旧版本进行了绑定:

    <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.1.0" />
    </dependentAssembly>
    
  2. 编辑我的.csproj文件以确保只有一个Newtonsoft引用

    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
       <SpecificVersion>False</SpecificVersion>
       <Private>True</Private>
    </Reference>
    
  3. 在我的计算机上搜索每个Newtonsoft.Json.dll并删除每个非6.0.1版本并删除我的临时文件夹的内容

  4. 在nuget manager console

  5. 中修复/重新安装软件包

    成功构建,但在访问网站时会收到错误。

    修改

    好的,所以我尝试重新安装,就像每个nuget包一样,它似乎已经添加了新版本的newtonsoft.json.dll,但是我得到了同样的错误。我的项目的目标freamework是.NET 4.5.1,这是我现在得到的堆栈跟踪:

      

    &#39; /&#39;中的服务器错误应用。

         

    无法加载文件或程序集&#39; Newtonsoft.Json&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

         

    描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

         

    异常详细信息:System.IO.FileLoadException:无法加载文件或程序集&#39; Newtonsoft.Json&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

         

    来源错误:

         

    在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

         

    装配加载跟踪:以下信息有助于确定装配&#39; Newtonsoft.Json&#39;无法加载。

         

    ===预绑定状态信息===       日志:DisplayName = Newtonsoft.Json        (部分)       警告:为程序集提供了部分绑定信息:       警告:程序集名称:Newtonsoft.Json |域名ID:2       警告:仅提供部分程序集显示名称时发生部分绑定。       警告:这可能导致装订器装入错误的装配。       警告:建议为程序集提供完全指定的文本标识,       警告:它由简单的名称,版本,文化和公钥令牌组成。       警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270。       日志:Appbase = file:/// c:/ users / user / documents / visual studio 2013 / Projects / foo / bar /       日志:初始PrivatePath = c:\ users \ user \ documents \ visual studio 2013 \ Projects \ foo \ bar \ bin       调用程序集:(未知)。       ===       日志:此绑定在默认加载上下文中启动。       日志:使用应用程序配置文件:c:\ users \ user \ documents \ visual studio 2013 \ Projects \ foo \ bar \ web.config       日志:使用主机配置文件:C:\ Users \ user \ Documents \ IISExpress \ config \ aspnet.config       日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。       日志:此时策略未应用于引用(私有,自定义,部分或基于位置的程序集绑定)。       日志:尝试下载新的URL文件:/// C:/ Users / user / AppData / Local / Temp / 1 / Temporary ASP.NET Files / root / 48686d37 / 9d7a6572 / Newtonsoft.Json.DLL。       日志:尝试下载新的URL文件:/// C:/ Users / user / AppData / Local / Temp / 1 / Temporary ASP.NET Files / root / 48686d37 / 9d7a6572 / Newtonsoft.Json / Newtonsoft.Json.DLL。       日志:尝试下载新的URL文件:/// c:/ users / user / documents / visual studio 2013 / Projects / foo / bar / bin / Newtonsoft.Json.DLL。       日志:使用应用程序配置文件:c:\ users \ user \ documents \ visual studio 2013 \ Projects \ foo \ bar \ web.config       日志:使用主机配置文件:C:\ Users \ user \ Documents \ IISExpress \ config \ aspnet.config       日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。       日志:在应用程序配置文件中找到重定向:4.5.0.0重定向到6.0.1.0。       日志:政策后参考:Newtonsoft.Json,Version = 6.0.1.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed       日志:尝试下载新的URL文件:/// C:/ Users / user / AppData / Local / Temp / 1 / Temporary ASP.NET Files / root / 48686d37 / 9d7a6572 / Newtonsoft.Json.DLL。       日志:尝试下载新的URL文件:/// C:/ Users / user / AppData / Local / Temp / 1 / Temporary ASP.NET Files / root / 48686d37 / 9d7a6572 / Newtonsoft.Json / Newtonsoft.Json.DLL。       日志:尝试下载新的URL文件:/// c:/ users / user / documents / visual studio 2013 / Projects / foo / bar / bin / Newtonsoft.Json.DLL。       警告:比较程序集名称导致不匹配:主要版本       错误:无法完成程序集的设置(hr = 0x80131040)。探测终止。

         

    堆栈追踪:

         

    [FileLoadException:无法加载文件或程序集&#39; Newtonsoft.Json&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)]

         

    [FileLoadException:无法加载文件或程序集&#39; Newtonsoft.Json,Version = 6.0.1.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)]          System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+0          System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+34          System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,Evidence assemblySecurity,RuntimeAssembly reqAssembly,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+152          System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder,Boolean forIntrospection)+77          System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMark&amp; stackMark,Boolean forIntrospection)+16          System.Reflection.Assembly.Load(String assemblyString)+28          System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName,Boolean starDirective)+38

         

    [ConfigurationErrorsException:无法加载文件或程序集&#39; Newtonsoft.Json,Version = 6.0.1.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)]          System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName,Boolean starDirective)+752          System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()+ 218          System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)+130           System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)+170          System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies()+91          System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath,Boolean&amp; isRefAssemblyLoaded)+285          System.Web.Compilation.BuildManager.ExecutePreAppStart()+153          System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager,IApplicationHost appHost,IConfigMapPathFactory configMapPathFactory,HostingEnvironmentParameters hostingParameters,PolicyLevel policyLevel,Exception appDomainCreationException)+516

         

    [HttpException(0x80004005):无法加载文件或程序集&#39; Newtonsoft.Json,Version = 6.0.1.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)]          System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+9913572          System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+101          System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext context)+254

         

    版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.18408

31 个答案:

答案 0 :(得分:252)

为了解决这个问题,我通过运行以下命令并检查结果来确保我的所有项目都使用相同的版本:

update-package Newtonsoft.Json -reinstall

最后,我从web.config中删除了以下内容:

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

如果您想确保所有Newtonsoft.Json软件包都是相同版本,您可以指定版本,如下所示:

update-package Newtonsoft.Json -version 6.0.0 -reinstall

答案 1 :(得分:78)

我正在使用Newtonsoft.Json v6.0.3,但这是我在Web.config文件中必须做的事情:

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

请注意,即使我使用的是6.0.3,我也必须输入newVersion="6.0.0.0"

在我的packages.config文件中,我有:

<package id="Newtonsoft.Json" version="6.0.3" targetFramework="net45" />

答案 2 :(得分:57)

在确保我的计算机在所有位置都具有相同版本并且我的项目都指向相同的参考路径之后,我尝试了以下操作。我还确保旧版本的绑定是他们的,并且绑定到我当前版本的dll。

我在一个有严格框架的环境中工作,框架团队经常用不同的dll打乱版本。

我如何修复此问题是在visual studio(2013)中运行包管理器控制台。从那里我运行以下命令:

update-package Newtonsoft.Json -reinstall

接着是

update-package Newtonsoft.Json

这经历并更新了我的所有配置文件和相关的项目文件。强迫它们全部使用相同版本的dll。这是最初的版本4.5,然后再次更新以获取最新版本。

答案 3 :(得分:25)

我有相同的错误消息,就像你提到的那样,这是由于引用了不同版本的Newtonsoft.Json.dll。

我的MVC解决方案中的一些项目使用NuGet包来获得该版本的第4版。

然后我添加了一个NuGet包(对于我的案例中的Salesforce),它将Newtonsoft.Json版本6作为其中一个项目的依赖项。这就是我引发问题的原因。

为了清理,我使用NuGet包管理器中的更新部分来解决方案(在“工具”菜单或解决方案上单击鼠标右键)以在整个解决方案中更新Json.Net包,因此它对于所有项目都是相同的版本

之后我只检查了App Config文件,以确保任何绑定重定向行都转到我选择的版本,如下所示。

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />

答案 4 :(得分:16)

好的,我想我现在可以上班了。我删除了我的机器上的每个Newtonsoft.Json.dll,它不是我能找到的最新版本,确保我在NuGet中有最新版本,并构建它并确保它是bin文件夹中的最新版本,我将更改保留在web.config和.csproj中。现在我正在处理另一个错误,所以它必须正常工作..

答案 5 :(得分:6)

经过数小时的努力后,我做了以下事情:

web.config

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

    <!-- other assemblies... -->

  </assemblyBinding>
</runtime>

输入正确的newVersion和oldVersion编号的键是打开项目的References,然后找到该包的属性或单击alt + enter

在使用Manage NuGet进行探索时,您会发现一个Version部分,在我的情况下是12.0.0.0,而实际上是12.0.3

因此,您需要从参考属性(在我的情况下为12.0.0.0)中选择软件包的版本

最后,cleanrebuild项目(您可能希望先删除binobj文件夹)。

您可能会遇到其他程序包依赖关系问题,我做到了所有这些,并且它们奏效了。

答案 6 :(得分:4)

您可以通过在web.config文件中添加以下行来解决此问题。

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

答案 7 :(得分:4)

通过在我的web.config上对此部分进行评论解决了我的问题:

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

但是当然你需要确保你已经更新了,或者你在包管理器控制台中执行了这个版本,你需要更新版本:

update-package Newtonsoft.Json -reinstall

答案 8 :(得分:4)

我已经尝试过奥列格的步骤,他们也为我的情况工作。

<强>步骤:

  1. 在程序包管理器中运行update-package Newtonsoft.Json -reinstall

  2. 通过启用查看隐藏文件并删除bin文件夹来删除bin

  3. 关闭Visual Studio并重新打开它。

  4. 现在再次运行您的项目。我相信应该没问题!

答案 9 :(得分:3)

就我而言,这只是一个问题:

Tools -> NuGet Package Manager -> Package Manager Settings -> Clear Cache

当我重新映射TFS文件夹时,问题就出现了。

答案 10 :(得分:2)

如果你正在处理某种颠覆: 删除项目并重新下载,它对我有用:S

答案 11 :(得分:2)

我不知道为什么,但在我的情况下,即使我从项目中删除bin文件夹,当我构建项目时,它复制旧版本的newtonsoft.json,我从packages文件夹中复制了新版本的dll,它现在解决了

答案 12 :(得分:1)

从工具>> NuGet软件包管理器>>管理解决方案的软件包 将所有解决方案的Newtonsoft.Json更新到最新版本

答案 13 :(得分:1)

没有一个答案,包括经过检查的答案对我不起作用。

解决方案要简单得多。我首先删除了BUS层的引用。然后从项目中删除了dll(以确保它已经消失),然后从nuget packeges重新安装JSON.NET。而且,棘手的部分是“再次关闭它”。

我刚刚重新启动了visual studio,它在那里工作了!

因此,如果您尝试了所有可能但仍无法解决问题,只需尝试关闭视觉工作室,这可能会有所帮助。

答案 14 :(得分:1)

如果这些都不起作用,请查看以下答案:

https://stackoverflow.com/a/12011221/150370

TL; DR :从配置文件中的configuration标记中删除xml命名空间。否则将忽略绑定重定向)

答案 15 :(得分:1)

在某些情况下,如果您删除BinObj文件夹,则可以解决此问题。

答案 16 :(得分:1)

我在参考MVC 5项目的测试项目中遇到了同样的问题。这是在我与MVC 5项目合并之后发生的。我通过安装Visual Studio 2012更新修复了它,正如安德烈的回复中所解释的那样here

  • 在您的视觉工作室中去
    1. 工具&gt;扩展和更新
    2. 在左侧的手风琴列表中选择“更新”。
    3. 选择“产品更新”。
    4. 更新到最新版本

答案 17 :(得分:1)

我通过在bin文件夹中删除较低版本的Newtonsoft.json.dll并添加了Newtonsoft.json.dll V6.0.0.0并删除了以下web.config元素来解决它

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
</dependentAssembly>

答案 18 :(得分:1)

我在dotnet core上遇到了同样的问题,并设法通过清除NuGet缓存来解决它。

打开Powershell并输入以下命令。

dotnet nuget locals all --clear

然后我关闭Visual Studio,再次将其打开,然后在“程序包管理器控制台”中输入以下命令:

Update-Package

NuGet现在应该还原所有软件包,并再次弹出nuget缓存。

之后,我能够在Linux容器中构建并启动我的dotnet核心webapi。

答案 19 :(得分:0)

我的问题是web.config中此代码中的newVersion不正确

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

您可以在nuget软件包管理器中查看Newtonsoft.Json软件包的版本并使用它。

答案 20 :(得分:0)

就我而言,出现错误消息是“ 版本6.0.0 ”,但此版本无法安装,因此我安装了“ 6.0.1版本”,并解决了我的问题。

install-package Newtonsoft.Json -Version 6.0.1 -Project MyProjectX

答案 21 :(得分:0)

为此解决了我问题的解决方案是

转到参考->右键单击Newtonsoft.json--转到属性并检查版本

该版本应位于

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

答案 22 :(得分:0)

好的,我想要做的就是在这里添加我的答案,而不是创建一个重复的问题...

如果要在2019年使用.NET Core 3.0(此时为预览)获得此解决方案,则解决方案是确保所有项目都针对相同的.NET Core版本(在我的情况下为3.0)。我想我在解决方案中有一个针对2.1的项目,其余的都是2.2,所以我可能会坚持使用2.2 ...

我什至没有在任何项目中安装Newtonsoft.Json,自然地将其添加到它们中并不能解决问题。

如果您的解决方案中包含.NET Standard类库或w / e,则它们不必是同一版本,尽管它们可能应该是最新的。例如,我的.NET Standard类库在2.2上,因为还没有.NET Standard 3.0。

答案 23 :(得分:0)

通过刷新NuGet包或执行&#34; Clean&#34;这个问题并没有解决。在项目上。通过清除&#34; obj&#34;文件夹手动。

答案 24 :(得分:0)

以下是我对此问题的解决方案,请确保appconfig或packageconfig中的版本号与引用中的参考版本相同。 见here

答案 25 :(得分:0)

我有同样的问题。我创建了一个web api项目,然后将其从.net 4.5.1升级到.net 4.6.1。关闭IDE,停止IIS以及删除C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ dir的内容修复了此问题。

HTH

答案 26 :(得分:0)

这些选项都不适用于我,最终是这样;

测试&gt;测试设置&gt; * .testrunco​​nfig

我必须添加一个新行

<DeploymentItem filename="packages\Newtonsoft.Json.4.5.8\lib\net40\Newtonsoft.Json.dll" />

确保路径和版本适合您的设置。

答案 27 :(得分:0)

我有完全相同的问题,我的Visual Studio 13默认库是4.5,所以我有2个解决方案,一个是在webconfig文件中取出对此的引用。这是最后的手段,它确实有效。

错误消息指出此位置/Projects/foo/bar/bin/Newtonsoft.Json.DLL存在问题。 DLL在哪里!一个基本的属性检查告诉我它是4.5.0.0或类似的所以我更改了webconfig以查找到4.5并使用4.5。

                        

答案 28 :(得分:0)

我最近和老项目一起努力。

我检查了bin文件夹中实际存在的dll版本后,设法找到了问题。

我有一个构建后的脚本,它将依赖的程序集从dll库文件夹复制到bin文件夹。从nuget之前的几天开始的常见设置。

所以每次我构建后构建脚本都会用旧版本替换正确版本的Json.net

答案 29 :(得分:0)

我遇到了这个问题,因为我有:项目A(桌面.exe)引用项目B(便携式.dll)。 A&amp; B有不同版本的JSON.Net,因此存在加载程序冲突。 一旦我使JSON.net的所有版本都相同,它就有效了。 (这实际上是上面的一些解决方案正在做的事情 - 我只是在说出它的工作原理)

答案 30 :(得分:0)

简单的步骤。 (1)运行&#34; update-package Newtonsoft.Json -reinstall&#34;在包管理器中。

(2)通过启用查看隐藏文件并删除bin文件夹来删除bin。

(3)关闭视觉工作室并重新打开它。

(4)现在再次运行你的项目。 我相信应该没问题