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

问题描述 投票:192回答:31

搜索后我尝试过的事情:

  1. 在Web.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控制台中修复/重新安装软件包

它成功构建,但在访问网站时出错。

编辑

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

'/'应用程序中的服务器错误。

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

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

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

来源错误:

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

程序集加载跟踪:以下信息有助于确定无法加载程序集“Newtonsoft.Json”的原因。

===预绑定状态信息===日志:DisplayName = Newtonsoft.Json(部分)WRN:为程序集提供了部分绑定信息:WRN:程序集名称:Newtonsoft.Json |域ID:2 WRN:仅提供部分程序集显示名称时发生部分绑定。警告:这可能导致装订器装入错误的装配。警告:建议为程序集提供完全指定的文本标识,即WRN:由简单名称,版本,区域性和公钥标记组成。警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270。日志:Appbase = file:/// c:/ users / user / documents / visual studio 2013 / Projects / foo / bar / LOG:Initial 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:无法加载文件或程序集'Newtonsoft.Json'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)]

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

[ConfigurationErrorsException:无法加载文件或程序集'Newtonsoft.Json,Version = 6.0.1.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (来自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&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):无法加载文件或程序集'Newtonsoft.Json,Version = 6.0.1.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (来自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

json json.net .net-assembly
31个回答
255
投票

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

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

3
投票

实际帮助我的是关闭Resharper构建并在我的项目中使用VisualStudio重新构建选项。


2
投票

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


2
投票

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


1
投票

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

  • 在你的视觉工作室去 工具>扩展和更新 在左侧的手风琴列表中选择“更新”。 选择“产品更新”。 更新到最新版本

1
投票

没有任何答案,包括已检查的答案对我不起作用。

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

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

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


1
投票

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

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

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


1
投票

在某些情况下,如果你删除你的BinObj文件夹将解决这个问题。


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>

1
投票

我在dotnet核心遇到了同样的问题,并设法通过清除NuGet缓存来修复它。

打开powershell并输入以下命令。

dotnet nuget locals all --clear

然后我关闭了Visual Studio,再次打开它并在Package Manager控制台中输入以下命令:

Update-Package

NuGet现在应该恢复所有包并再次填充nuget缓存。

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


1
投票

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


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

0
投票

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

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

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

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


0
投票

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


0
投票

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

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

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

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


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。


0
投票

这些选择都不适合我,最终它是;

测试>测试设置> * .test runco​​nfig

我不得不添加一个新行

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

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


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


0
投票

通过刷新NuGet包或在项目上执行“清理”,我没有解决这个问题。通过手动清除“obj”文件夹解决了这个问题。


0
投票

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


0
投票

在我的情况下,错误的消息是“版本6.0.0”,但此版本无法安装,所以我在我的项目中安装了“6.0.1版本”并解决了我的问题。

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

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包的版本并使用它。


57
投票

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

我在一个有严格框架的环境中工作,框架团队经常用不同的dll来破坏版本控制。

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

update-package Newtonsoft.Json -reinstall

其次是

update-package Newtonsoft.Json

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


0
投票

解决我的问题的解决方案是

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

同样的版本应该在

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

25
投票

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

我的MVC解决方案中的一些项目使用NuGet包来实现该DLL的第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" />

17
投票

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


5
投票

通过在我的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

4
投票

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

脚步:

  1. 在包管理器中运行update-package Newtonsoft.Json -reinstall
  2. 删除bin,方法是查看隐藏文件并删除bin文件夹。
  3. 关闭Visual Studio并重新打开它。
  4. 现在再次运行您的项目。我相信应该没问题!

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>

3
投票

在我的情况下,这只是一个问题:

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

我重新映射TFS文件夹时导致问题。

© www.soinside.com 2019 - 2024. All rights reserved.