我正在使用ASP.NET Core。我想使用,HttpClient
但是我注意到提供了两个NuGet软件包。我要使用哪一个?
我正在使用ASP.NET Core。我想使用,HttpClient
但是我注意到提供了两个NuGet软件包。我要使用哪一个?
Answers:
取决于版本。旧System.Net.Http
软件包(2.0软件包)是旧软件包,Microsoft.Http.Net
根据说明不推荐使用:
传统包System.Net.Http现在包含在“ Microsoft.Net.Http”包中。
它们的存在是为了提供HttpClient
.NET以前的版本和可移植类库。你应该用Microsoft.Net.Http
在这种情况下,。
由于您使用的是.NET Core,因此应使用最新的System.Net.Http
软件包(例如4.3.3)。
为csproj更新
从.NET Standard 2.0开始,该System.Net.HttpClient
软件包已包含在内,在您定位时可用netstandard2.0
。如果由于某种原因,您仍然想同时为完整的.NET和.NET Core引用它,则可以将其添加到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 Core,则必须将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
}
}
}
System.Net.Http
现在已包含在其中Microsoft.Net.Http
”。包说明中所指的语言。实际上,该System.Net.Http
软件包似乎是最新的(已更新了几年)
对于对此感兴趣的人,Immo Landwerth(Microsoft .NET上的程序经理)在推特上发布了以下内容:
“ HttpClient最初是作为NuGet包(带外)提供的,并且也已在4.5(内置)中添加到.NET Framework中。
使用.NET Core / .NET Standard,我们最初尝试将.NET平台建模为一组软件包,而不再需要内置和带外。但是,这比我们预期的更为混乱和复杂。
结果,我们在很大程度上放弃了将.NET平台建模为带有Core / Standard 2.0的NuGet图的想法。
普遍的答案是:
使用.NET Core 2.0和.NET Standard 2.0,您根本不需要引用SystemNetHttpClient NuGet程序包。不过,它可能会从1.x依赖项中提取。
.NET Framework也是如此:如果您的目标是4.5及更高版本,则通常应使用内置版本而不是NuGet软件包。再次,您可能最终将其引入.NET Standard 1.x和PCL依赖性,但是直接针对.NET Framework编写的代码不应使用它。
那么为什么该软件包仍然存在/为什么我们仍要对其进行更新?仅仅因为我们想使现有代码依赖于它而工作。但是,正如您发现的那样,在.NET Framework上运行并不顺利。
旧版软件包的预期模型是:如果您使用.NET Framework 4.5 + 、. NET Core 2 + 、. NET Standard 2+中的软件包,则该软件包只会转发到平台提供的实现中,而不会带来自己的版本。
但是,这并不是在所有情况下实际发生的情况:HTTP客户端程序包将(部分)替换.NET Framework上的内置组件,这些组件可能对某些客户有效而对其他客户而言无效。因此,我们现在无法轻松解决此问题。
最重要的是,.NET Framework存在常见的绑定问题,因此,仅当您添加绑定重定向时,这才真正有效。好极了!
因此,作为图书馆作者,我的建议是避免依赖于此程序包,而希望使用.NET Framework 4.5,.NET Core 2.0和.NET Standard 2.0中的内置版本。”
Microsoft.Net.Http
需要额外的 Microsoft.Bcl
依赖项。
为此,如果您只针对.NET Framework或.NET Core,System.Net.Http
那就很好了。否则,Microsoft.Net.Http
将是更好的选择,因为它可能是下一代。
System.Net.Http
要看Microsoft.Net.Http
。但是,这又取决于您要对应用程序执行的操作。