首页 > 解决方案 > 无法加载文件或程序集'Newtonsoft.Json,版本 = 10.0.0.0

问题描述

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

我有 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, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 或其依赖项之一。系统找不到指定的文件。”

我已经验证所有项目都引用了同一个Newtonsoft.Json包 version 12.0.1。我还检查了我的项目文件,以确保没有对Newtonsoft.Json版本的引用10.0.0.0

我错过了什么?

标签: c#.netnugetnuget-package

解决方案


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

您需要检查解决方案中每个项目引用的所有 NuGet 包,以查看它们需要什么版本的 Newtonsoft Json。有些指定了最小版本,在这种情况下您没有问题(例如 > 10,任何高于 10 的都可以),有些则需要某个固定的版本(= 10,必须是 10,不能少,不能更高) . 这取决于该特定 NuGet 包的作者。

当您点击构建时,将复制引用包所需的 dll,然后复制任何引用项目所需的 dll,并且可能会复制某个版本,当您运行应用程序时,您会收到错误你已看到。

您可以通过查看构建配置文件的 bin 文件夹来检查这一点,右键单击 dll 文件并检查其版本以查看您拥有的内容。如果在正确的位置完成,程序集重定向应该会有所帮助,但是有一个替代解决方案,尽管它并不总是可能的。

如果您可以将 Newtonsoft Json 降低到满足所有要求的最低版本,那么这是解决问题的好方法。您可能不需要版本 12,具体取决于您从中使用的内容以及其他软件包的要求。您也许可以更改所有项目以引用较低版本而不会产生任何副作用。如果可以的话,你就是黄金,只要确保你不会错误地升级。如果没有,您必须按照其他答案中的说明进行版本重定向。

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

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

一旦您设法将所有内容都集中在一个级别上,请确保:

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

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

完成所有这些后,如果您在任何地方都有一个版本,您应该能够毫无问题地运行您的项目


推荐阅读