所引用的组件'System.Net.Http'无法找到。

11

我在VS2017中创建了一个新项目,目标为.NET Framework 4.6.1。当我添加对System.Net.Http的NuGet包引用时,它及其依赖项出现以下警告:

The referenced component 'System.Net.Http' could not be found.

该项目(及其解决方案)编译通过,但运行时出现异常,因为在尝试实例化HttpClient时无法找到程序集。

我已确认HintPath指向packages文件夹中的正确位置,并且DLL大小为193 KB。 我已删除引用,并尝试直接添加对DLL的引用,但没有成功。

我还尝试通过Framework > Assemblies添加引用,但无论我做什么,引用都会显示警告图标,并且引用的属性如下:

System.Net.Http Reference Properties

我已经尝试了以下方法:
  • 删除并重新添加NuGet引用
  • 删除引用,清除NuGet缓存,并重新添加NuGet引用
  • 使用适当的参数运行Update-Package -reinstall
  • 将解决方案复制到另一台计算机上并进行尝试(结果相同)
似乎无论我尝试什么,都无法使引用正常工作。我应该尝试哪些其他方法?

你用哪个模板创建这个项目的?你创建项目的步骤是什么?这可以帮助他人重现这个问题。 - Jasen
我使用了Azure Service Fabric模板;我遇到问题的项目是一个无状态服务。 - Adrian Anttila
{btsdaf} - Leo Liu
{btsdaf} - Adrian Anttila
1
我遇到了相同的问题,但有以下几点不同:1)我只在Visual Studio 2017(15.4.2)的错误列表窗口中收到“找不到引用的组件'System.Net.Http'”的错误提示,尚未出现运行时错误。2)我的4.6.1项目正在引用.NET Standard 2.0项目+NETStandard.Library 2.0.0。欢迎对此提出任何评论。 - Marson
@Marson 我和你一样收到了这个警告。你已经弄清楚为什么会发生这种情况了吗? - Lasse Christiansen
4个回答

10

简而言之,Service Fabric服务与.NET Standard包的项目引用不兼容。为了避免出现问题,使用完整的.NET Framework来编写类库。


经过几个小时的反复尝试后,我确定问题并不出在System.Net.Http包本身,而是由于解决方案中对另一个项目的引用导致的。

如果我引用了针对netstandard1_6的项目,则System.Net.Http引用(包括依赖包)无法加载或解析。 一旦我删除了项目引用,它们就可以正常加载! 最终,我将引用的项目更改为“常规”.NET Framework项目,并添加了对该版本的引用,所有引用都正常工作。

我们怀疑有几件事情,但不确定是什么原因:

  • .NET Standard的项目文件格式与.NET Framework不同
  • Service Fabric项目需要x64,而.NET Standard项目则对任何CPU进行了优化

欢迎任何额外的解释!


感谢您在此分享解决方案,您可以将其标记为答案,以帮助其他遇到相同问题的社区成员。 - Leo Liu

4
今天我遇到了这个问题。在我的情况下,原因是NuGet选项中的“依赖性行为”设置为“最低”,它会下载与相关包兼容的最低版本。不幸的是,有时它会下载一个与项目运行时版本不兼容的包版本。在我的情况下,包System.Net.Http.Formatting.Extensions导致安装了System.Net.Http版本2.20 ...,这在我的.NET 4.7.1项目中无法识别。

在解决方案的Nuget包管理器的更新选项卡中,它将显示这些包的更新。安装它们,你的问题就应该解决了。 或者,在安装NuGet包时将依赖关系行为设置为最高。

我从模板创建了一个新的WebJob项目,然后使用NuGet更新了包。NuGet添加了几个需要更新的新包,我进行了更新。在这一点上,我看到了程序集未找到的消息。我删除了所有内容,重新创建了项目,并在执行更新之前将依赖项行为设置为最高。这一次,一切都按预期工作,没有额外的包被添加到项目中。 - bmacadam

0
有时候删除所有现有的引用是很有用的。然后重新加载项目,所有引用上的错误标志都会被移除。然后手动添加每个引用。

0
今天在尝试使用 .net Framework 4 时遇到了这个问题。如果您没有安装 ASP.NET MVC 4,则无法使用 System.Net.Http。请从此 microsoft link 安装 ASP.NET MVC 4。安装完成后,请重新构建,System.Net.Http 就可以使用了。

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