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

时间:2019-01-29 14:11:17

标签: c# .net nuget nuget-package

我不明白我面临的以下问题。

我有3个项目,A,B和C。它们都引用了Newtonsoft.Json版本12.0.1

项目a引用了项目B和C。项目B引用了Microsoft.IdentityModel.Tokens.Jwt

运行项目A时,在尝试执行创建令牌所需的功能时收到以下运行时错误。

消息:

  

“'System.IdentityModel.Tokens.Jwt.JsonExtensions'的类型初始值设定项引发了异常。”

内部异常:

  

“无法加载文件或程序集'Newtonsoft.Json,版本= 10.0.0.0,Culture =中性,PublicKeyToken = 30ad4fe6b2a6aeed'或其依赖项之一。系统找不到指定的文件。”

我已验证所有项目都引用了版本为Newtonsoft.Json的相同12.0.1软件包。 我还检查了我的项目文件,以确保没有引用到Newtonsoft.Json版本10.0.0.0

我想念什么?

5 个答案:

答案 0 :(得分:1)

我认为您的某些项目引用的是版本10,而其他项目引用的是newtonsoft.json.dll的版本12。

似乎v12 DLL正在复制到输出目录。引用v10的项目抛出此错误。

对于所有强命名程序集,在应用程序目录或GAC中搜索DLL的特定版本。您可以使用下面的配置文件条目来覆盖此默认行为-指示.net框架在每次调用0到12的任何版本时始终寻找v12。

<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.1.0" newVersion="12.0.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

希望这有助于解决您的问题。

答案 1 :(得分:1)

Newtonsoft Json虽然有用,但却是许多问题的根源。

您将需要检查解决方案中每个项目引用的所有NuGet软件包,以查看它们所需的Newtonsoft Json版本。有些指定了最低版本,在这种情况下,您没有问题(例如> 10,任何高于10的版本都可以使用),另一些则要求特定的固定版本(= 10,必须为10,不能小于或等于更高)。 。这取决于特定的NuGet软件包的作者。

当您点击build时,将复制参考包所需的dll,然后复制所有参考项目所需的dll,并且有可能复制某个版本,并且在您运行应用程序时,得到您看到的错误。

您可以通过在构建配置文件的bin文件夹中查找来进行检查,右键单击dll文件并检查其版本以查看所拥有的内容。在正确的位置完成组装重定向应该会有所帮助,但是有一种替代解决方案,尽管并不总是可能的。

如果可以将Newtonsoft Json降至满足所有要求的最低版本,那么这是解决问题的好方法。根据您使用的版本以及其他软件包的要求,您可能不需要版本12。您可能可以更改所有项目以引用较低的版本,而不会产生任何副作用。如果可以的话,那么您就很聪明,只要确保您没有错误升级即可。如果没有,则必须按照其他答案中的指示进行版本重定向。

基本思想是确保在您的解决方案中,您仅使用一个版本的Newtonsoft。您可以在解决方案级别检查此软件包,也有合并选项。

因此,请检查解决方案中的所有项目,确保它们都使用一个版本的Newtonsoft,并且该版本在所有项目中都相同。

一旦您设法使所有内容都达到一个级别,请确保:

  1. 您删除Temporary ASp.Net文件夹中的内容,在Windows / Microsoft.Net,Framework23或64中取决于您使用的是哪个。

  2. 从所有bin文件夹中删除所有dll,简单的清理可能还不够。

完成所有这些操作后,只要到处都有一个版本,您就应该能够毫无问题地运行项目

答案 2 :(得分:0)

找出要加载此库的项目。右键单击project-> Manage Nuget Packages-> Find NewtonJson库,然后单击Uninstall,也许会有所帮助。就像使用前提供的人员一样,您也可以组装重定向。

答案 3 :(得分:0)

我终于做到了。为了在Azure Functions中执行程序集重定向绑定,与普通的.Net应用程序相比,它需要花费更多的精力。

我关注了以下帖子: https://codopia.wordpress.com/2017/07/21/how-to-fix-the-assembly-binding-redirect-problem-in-azure-functions/

答案 4 :(得分:-1)

在使用Microsoft.IdentityModel.Tokens.Jwt的地方,不要将其作为使用添加到页面中,而是直接对其进行引用。

相关问题