无法加载文件或程序集“System.Net.Http.Formatting”或其某个依赖项。系统找不到指定的路径。

188

我有一个小的MVC应用程序,我用它来进行练习,但现在每次我尝试调试时都会遇到一个错误:

Could not load file or assembly 'System.Net.Http.Formatting' or one of its dependencies. 
The system cannot find the path specified.

我已经通过谷歌搜索但找不到解决方案。我正在使用.NET 4.5。

这不可能是DLL文件的问题,因为我正在使用.NET 4.5。


1
请参见此处的依赖关系... https://www.nuget.org/packages/System.Net.Http.Formatting - Vishal Sharma
我尝试过了,但是没有成功...相反,在包管理器上出现了一个错误,显示'NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand'。 - Norris
22个回答

202
每当我遇到 NuGet 错误时,通常会采取以下步骤:
  1. 在 Windows 资源管理器中转到 packages 文件夹并将其删除。
  2. 打开 Visual Studio 并转到 工具 > 程序包管理器 > 程序包管理器设置,在左侧的程序包管理器项目下有一个"清除程序包缓存"按钮。单击此按钮,并确保选中“允许 NuGet 在构建过程中下载丢失的程序包”复选框。
  3. 清理解决方案
  4. 然后右键单击“解决方案资源管理器”中的解决方案,启用 NuGet 程序包还原
  5. 构建解决方案
  6. 重新启动 Visual Studio
采取这些步骤几乎总是可以恢复我 MVC 程序所需的所有程序包和 DLL。

编辑 >>>

对于 Visual Studio 2013 及以上版本,第二个步骤应为:

  1. 打开 Visual Studio 并转到 工具 > 选项 > NuGet 程序包管理器,在右侧有一个“清除程序包缓存”按钮。单击此按钮,并确保选中“允许 NuGet 下载丢失的程序包”和“在 Visual Studio 中构建过程中自动检查缺少的程序包”复选框。

8
这个有效...解决了问题...谢谢Jordan_Walters...我没有足够的声望可以投赞成票...不过非常感激你的帮助。 - Norris
15
建议很不错,但它并没有解决我的问题:“Could not load file or assembly 'System.Net.Http.Formatting' or one of its dependencies. The system cannot find the path specified”(无法加载文件或程序集“System.Net.Http.Formatting”或其某个依赖项。系统找不到指定的路径)。我必须进入“工具/ NuGet程序包管理器/程序包管理器控制台”,然后输入“Update-Package -ProjectName MyProject -reinstall”。一切问题都得到了解决! - GeoMac
4
我认为它在${SolutionDir}/packages/中,也就是根解决方案文件夹。 - jakejgordon
2
非常感谢这些有用的技巧,它们真的帮助了我。我希望你不介意我添加了一些关于Visual Studio后续版本的信息。 - Sheridan
2
我按照上述步骤进行了操作,但错误仍然存在。我手动查看了DLL版本,并检查了我的Web.config文件,发现有重复的条目。只需保留一个条目以匹配DLL版本,一切都应该能够正常工作 - 至少对我而言是这样的。 - JazziJeff
显示剩余9条评论

198
  • 删除所有关于 System.Net.* 的代码引用。

  • 在包管理器控制台中,运行以下命令:

    Install-Package Microsoft.AspNet.WebApi.Client

  • 清理并重建您的项目。


4
我刚遇到了这个问题,我安装了最新的Microsoft.AspNet.WebApi.Client NuGet包,并在引用列表中看到了System.Net.Http.Formatting。 - ewomack
1
我尝试了其他所有方法,但只有这个对我有效。 - Timothy Kanski
对我有用。确保安装正确的版本。 - CrusherJoe
2
在我更新了Web.Config中的bindingRedirect,将System.Net.Http.FormattingSystem.Web.Http的版本更新为上述命令安装的新版本后,此解决方案起作用了...即它从<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>变成了<bindingRedirect oldVersion="0.0.0.0-4.0.30319" newVersion="4.0.30319"/> - Serj Sagan
1
那么,很多人是不是错过了Microsoft.AspNet.WebApi.Client NuGet包呢? - carlin.scott

29
我发现多了一个

  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.2.28.0" newVersion="2.2.28.0" />
  </dependentAssembly>

在我的web.config文件中,我把它删除以使其正常工作。我安装了其他一些包,然后又将其删除导致了这个问题。


您怎么知道这个版本的公共标记是什么?b03f5f7f11d50a3a - eran otzap
它是由包管理器控制台命令自动添加的:Add-BindingRedirect *。 - Simon Hughes
我也做了同样的事情,对我也起作用了。谢谢! - Amit Guleria

24

user3919888指引了我正确的方向,但我需要在包管理器控制台中运行Update-Package -reinstall Microsoft.AspNet.WebApi.Client。仅进行基本安装无法识别问题,但可以识别已经安装该软件包并且不会覆盖它。

我发布这个答案是因为这种情况很少发生,以至于每次我都要通过谷歌并访问这个页面才能想起我上次做过的事情。


对我有用。谢谢。 - azakgaim

17
web.config中删除以下行解决了我的问题。请注意,在此项目中,我没有使用WebApi组件。因此,对于其他人来说,这个解决方案可能不起作用。
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>

你怎么知道这个版本的公共标记是什么? - eran otzap
据我所知,这是所有微软 DLL 的公共令牌,与其版本无关。 - Mahmoud Moravej
为了好玩,我添加了这些行并且它有所帮助。 - Krzysztof Madej
那对我也解决了问题。 - Vishal
这也解决了我的问题。我将一个旧的网站项目转换为Web应用程序。Web.config文件引用了版本5.2.7,而安装的NuGet包是5.2.3。从Web.config中删除它可以修复错误。 - Cesar Daniel

14

对于那些同时使用.NET Standard 项目和.NET Framework 项目的人:

在.NET Standard中,包含在.NET Standard项目中的软件包将正确地在其他.NET Core和.NET Standard项目中使用。

在.NET Framework中,如果您从.NET Framework(MVC)项目引用.NET Standard项目,则需要手动下载并安装相同的NuGet软件包。

所以,我的问题的答案是我需要在Web项目(.NET Framework)中下载并安装Microsoft.AspNet.WebApi.Client,这个Web项目在使用需要Microsoft.AspNet.WebApi.Client的.NET Standard项目。实际上,我已经安装了它,但版本不同。

我仅仅是为了让其他人看到这个答案,虽然它不能直接回答OP的问题,但这确实节省了我的时间,因为我首先检查了这个而不是做最受欢迎的答案。


1
我正在使用.NET Core,并在https://gingter.org/2018/07/26/how-to-mock-httpclient-in-your-net-c-unit-tests/上找到了一个模拟HttpClient的指南。按照该指南进行操作后,我遇到了OP问题中描述的问题。而您的解决方案解决了这个问题 :) - Thorkil Værge
这是对我有用的方法。尝试了推荐的方法,删除和恢复所有包,但最后我不得不使用 Nuget 安装 Microsoft.AspNet.WebApi.Client,确保它是我需要的版本,之后一切都很好。 - TH Todorov
非常好的答案 - 我开始觉得我需要把所有东西都移回框架! - d219

7

如同GeoMac在评论中建议的,NuGet文档 中记录的下列方法对我非常有效,当其他答案都无法解决问题时:

工具 / NuGet程序包管理器 / 程序包管理器控制台

Update-Package -ProjectName MyProjectName -reinstall

我有Visual Studio 2015。这就是我必须做的,我立刻修复了它。 - Damian C

6
  1. 删除所有对 System.Net.* 的代码引用。
  2. 卸载:包含Microsoft.AspNet.WebApi及其依赖项的软件包。
  3. 重新安装所有:包含Microsoft.AspNet.WebApi及其依赖项的软件包。
  4. 清除并重建您的项目。

谢谢!在我经过两天拼命尝试之后,您让我脱离了危险。这几乎让我发疯了。 - Marek Dorda

4

对我而言,这个问题是由于添加Microsoft.AspNet.WebApi.Client包后,在Web.config中缺少程序集绑定条目(System.Net.Http.Formatting)所致。

我检查了我的Microsoft.AspNet.WebApi.Client版本,并将以下绑定添加到Web.config:

  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" />
  </dependentAssembly>

根据您所拥有的 WebApi.Client 版本,在绑定重定向中更改版本。


这对我解决了问题。我尝试了上述所有方法,卸载/重新安装各种软件包,但只是缺少web.config中的几行额外代码。 - Lazlow

3

在我的情况下,以上解决方案都没有奏效。我通过在Visual Studio中右键单击引用

System.Net.Http.Formatting

并将属性Copy Local设置为true来解决问题。

希望这对您有所帮助。


3
我做了那件事情,但情况仍然发生。 - eran otzap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接