我不明白我面临的以下问题。
我有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
我想念什么?
答案 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,并且该版本在所有项目中都相同。
一旦您设法使所有内容都达到一个级别,请确保:
您删除Temporary ASp.Net文件夹中的内容,在Windows / Microsoft.Net,Framework23或64中取决于您使用的是哪个。
从所有bin文件夹中删除所有dll,简单的清理可能还不够。
完成所有这些操作后,只要到处都有一个版本,您就应该能够毫无问题地运行项目
答案 2 :(得分:0)
找出要加载此库的项目。右键单击project-> Manage Nuget Packages-> Find NewtonJson库,然后单击Uninstall,也许会有所帮助。就像使用前提供的人员一样,您也可以组装重定向。
答案 3 :(得分:0)
我终于做到了。为了在Azure Functions中执行程序集重定向绑定,与普通的.Net
应用程序相比,它需要花费更多的精力。
答案 4 :(得分:-1)
在使用Microsoft.IdentityModel.Tokens.Jwt的地方,不要将其作为使用添加到页面中,而是直接对其进行引用。