我使用的是ASP.NET内核。我想使用HttpClient
,但我注意到提供了两个NuGet包。我该用哪一个?
发布于 2015-06-25 23:04:27
取决于版本。根据下面的描述,旧的System.Net.Http
包( 2.0包)是为了支持Microsoft.Http.Net
而被弃用的遗留包:
传统包,System.Net.Http现在包含在'Microsoft.Net.Http‘包中。
它们的存在是为了在以前的.NET版本和可移植类库中提供HttpClient
。在这种情况下,您应该使用Microsoft.Net.Http
。
由于您使用的是.NET核心,因此您应该使用最新的System.Net.Http
包(例如,4.3.3)。
已为csproj更新
从.NET标准2.0开始,已经包含了System.Net.HttpClient
包,并且在您针对netstandard2.0
时可以使用它。如果出于某种原因,您仍然希望在完整的.NET和.NET核心中引用它,您可以将以下内容添加到您的csproj文件中:
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<!-- // HttpClient for full .NET -->
<Reference Include="System.Net.Http" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<!-- // HttpClient for .NET Core -->
<PackageReference Include="System.Net.Http" Version="4.3.3" />
</ItemGroup>
如果使用的是project.json,则为
如果您的project.json同时针对完整的.NET和.NET核心,则必须将System.Net.Http
程序集添加到frameworkAssemblies
元素。例如:
"frameworks": {
"net451": {
"frameworkAssemblies": {
"System.Net.Http": "4.0.0.0" // HttpClient for full .NET
}
},
"netstandard1.3": {
"dependencies": {
"System.Net.Http": "4.1.0", // HttpClient for .NET Core
}
}
}
发布于 2018-09-14 22:30:34
对于任何对此感兴趣的人,请参阅Immo Landwerth (微软.NET上的项目经理) tweeted:
"HttpClient最初是一个NuGet包(带外),在4.5中也被添加到了.NET框架中(在盒子里)。
在.NET核心/ .NET标准中,我们最初试图将.NET平台建模为一组包,其中在盒内还是带外不再重要。然而,这比我们预期的更加混乱和复杂。
因此,我们在很大程度上放弃了使用核心/标准2.0将.NET平台建模为NuGet图的想法。
一般的答案是:
使用.NET Core2.0和.NET标准2.0,您根本不需要引用SystemNetHttpClient NuGet包。不过,它可能会从1.x依赖项中拉出来。
.NET框架也是如此:如果你的目标是4.5或更高版本,你通常应该使用内置版本而不是NuGet包。同样,您可能最终会在PCL 1.x和.NET依赖项中使用它,但是直接针对.NET框架编写的代码不应该使用它。
遗留包的预期模型是:如果您使用来自.NET框架4.5+,.NET核心2+,.NET标准2+的包,包只转发到平台提供的实现,而不是带来它自己的版本。
然而,这并不是在所有情况下都会发生的事情: HTTP Client包将(部分)替换.NET框架上的内置组件,后者碰巧对一些客户有效,而对另一些客户无效。
最重要的是,我们有.NET框架常见的绑定问题,所以只有在添加绑定重定向的情况下,这才能很好地工作。耶!
因此,作为一个库作者,我的建议是避免依赖这个包,而更喜欢.NET Framework4.5、.NET Core2.0和.NET标准2.0中的内置版本。“
发布于 2016-05-05 20:48:47
Microsoft.Net.Http
需要额外的Microsoft.Bcl
依赖项。
因此,如果您只针对.NET框架或.NET核心,则可以使用System.Net.Http
。否则,Microsoft.Net.Http
将是更好的选择,因为它可能是下一代。
https://stackoverflow.com/questions/31053243
复制相似问题