无法加载文件或程序集“Newtonsoft.Json,版本=10.0.0.0
Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0
我不明白我面临的以下问题。
我有 3 个项目,A、B 和 C。它们都引用了 Newtonsoft.Json
,版本 12.0.1
项目 A 引用了项目 B 和 C。项目 B 引用了 Microsoft.IdentityModel.Tokens.Jwt
当我 运行 项目 A 时,我在尝试执行创建我的令牌所需的功能时收到以下 运行 时间错误。
留言:
"The type initializer for 'System.IdentityModel.Tokens.Jwt.JsonExtensions' threw an exception."
内部异常:
"Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified."
我已验证所有项目都引用相同的 Newtonsoft.Json
包,版本为 12.0.1
。
我还检查了我的项目文件,以确保没有引用 Newtonsoft.Json
版本 10.0.0.0
我错过了什么?
在您使用的地方Microsoft.IdentityModel.Tokens.Jwt不要将其添加为页面的使用,而是直接引用它。
我认为您的一些项目引用了 newtonsoft.json.dll 的版本 10,而其他项目引用了版本 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>
希望这有助于解决您的问题。
找出试图加载此库的项目。右键单击项目 -> 管理 Nuget 包 -> 在已安装的库中查找 NewtonJson 库,然后单击卸载,也许这会有所帮助。也像使用前提供的人一样,您可以组装重定向吗?
我终于搞定了。为了在 Azure Functions 中执行程序集重定向绑定,它比普通的 .Net
应用程序需要更多的努力。
我关注了以下 post:
https://codopia.wordpress.com/2017/07/21/how-to-fix-the-assembly-binding-redirect-problem-in-azure-functions/
Newtonsoft Json 虽然有用,但却是许多问题的根源。
您将需要检查解决方案中每个项目引用的所有 NuGet 包,以查看它们需要哪个版本的 Newtonsoft Json。有些指定了最小版本,在这种情况下你没有问题(比如 > 10,高于 10 的任何东西都可以),其他则需要特定的固定版本(= 10,必须是 10,不低于,不高于) .这取决于特定 NuGet 包的作者。
当你点击构建时,引用包所需的 dll 将被复制,然后任何引用项目所需的 dll 将被复制,并且可能会复制某个版本,当你 运行 你的应用程序,你得到了你看到的错误。
您可以通过查看构建配置文件的 bin 文件夹来检查这一点,右键单击 dll 文件并检查其版本以查看您拥有的内容。如果在正确的位置完成,程序集重定向应该会有所帮助,但还有一个替代解决方案,尽管并非总是可行。
如果您可以将 Newtonsoft Json 降到满足所有要求的最低版本,那么这是解决问题的好方法。您可能不需要版本 12,具体取决于您使用的是什么以及其他软件包的要求。您可能能够更改所有项目以引用较低版本而没有任何副作用。如果可以,你就是金子,只要确保你没有错误升级。如果没有,您将必须按照其他答案中的指示进行版本重定向。
基本思想是确保在您的解决方案中只使用一个版本的 Newtonsoft。您可以在解决方案级别检查此包,还有一个合并选项。
因此,检查解决方案中的所有项目,确保它们都使用一个版本的 Newtonsoft,并且该版本在所有项目中都是相同的。
一旦您设法将所有内容都放在一个级别上,请确保:
您删除临时 ASp.Net 文件夹内容,在 Windows / Microsoft.Net,Framework23 或 64 取决于您使用的是哪个。
从所有 bin 文件夹中删除所有 dll,简单的清理可能不够。
完成所有这一切后,如果您到处都有一个版本,您应该能够运行您的项目没有问题
我不明白我面临的以下问题。
我有 3 个项目,A、B 和 C。它们都引用了 Newtonsoft.Json
,版本 12.0.1
项目 A 引用了项目 B 和 C。项目 B 引用了 Microsoft.IdentityModel.Tokens.Jwt
当我 运行 项目 A 时,我在尝试执行创建我的令牌所需的功能时收到以下 运行 时间错误。
留言:
"The type initializer for 'System.IdentityModel.Tokens.Jwt.JsonExtensions' threw an exception."
内部异常:
"Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified."
我已验证所有项目都引用相同的 Newtonsoft.Json
包,版本为 12.0.1
。
我还检查了我的项目文件,以确保没有引用 Newtonsoft.Json
版本 10.0.0.0
我错过了什么?
在您使用的地方Microsoft.IdentityModel.Tokens.Jwt不要将其添加为页面的使用,而是直接引用它。
我认为您的一些项目引用了 newtonsoft.json.dll 的版本 10,而其他项目引用了版本 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>
希望这有助于解决您的问题。
找出试图加载此库的项目。右键单击项目 -> 管理 Nuget 包 -> 在已安装的库中查找 NewtonJson 库,然后单击卸载,也许这会有所帮助。也像使用前提供的人一样,您可以组装重定向吗?
我终于搞定了。为了在 Azure Functions 中执行程序集重定向绑定,它比普通的 .Net
应用程序需要更多的努力。
我关注了以下 post: https://codopia.wordpress.com/2017/07/21/how-to-fix-the-assembly-binding-redirect-problem-in-azure-functions/
Newtonsoft Json 虽然有用,但却是许多问题的根源。
您将需要检查解决方案中每个项目引用的所有 NuGet 包,以查看它们需要哪个版本的 Newtonsoft Json。有些指定了最小版本,在这种情况下你没有问题(比如 > 10,高于 10 的任何东西都可以),其他则需要特定的固定版本(= 10,必须是 10,不低于,不高于) .这取决于特定 NuGet 包的作者。
当你点击构建时,引用包所需的 dll 将被复制,然后任何引用项目所需的 dll 将被复制,并且可能会复制某个版本,当你 运行 你的应用程序,你得到了你看到的错误。
您可以通过查看构建配置文件的 bin 文件夹来检查这一点,右键单击 dll 文件并检查其版本以查看您拥有的内容。如果在正确的位置完成,程序集重定向应该会有所帮助,但还有一个替代解决方案,尽管并非总是可行。
如果您可以将 Newtonsoft Json 降到满足所有要求的最低版本,那么这是解决问题的好方法。您可能不需要版本 12,具体取决于您使用的是什么以及其他软件包的要求。您可能能够更改所有项目以引用较低版本而没有任何副作用。如果可以,你就是金子,只要确保你没有错误升级。如果没有,您将必须按照其他答案中的指示进行版本重定向。
基本思想是确保在您的解决方案中只使用一个版本的 Newtonsoft。您可以在解决方案级别检查此包,还有一个合并选项。
因此,检查解决方案中的所有项目,确保它们都使用一个版本的 Newtonsoft,并且该版本在所有项目中都是相同的。
一旦您设法将所有内容都放在一个级别上,请确保:
您删除临时 ASp.Net 文件夹内容,在 Windows / Microsoft.Net,Framework23 或 64 取决于您使用的是哪个。
从所有 bin 文件夹中删除所有 dll,简单的清理可能不够。
完成所有这一切后,如果您到处都有一个版本,您应该能够运行您的项目没有问题