Nuget
NETStandard.Library 2.0.3
(最后更新于 2018 年 5 月 7 日)包含 System.Net.Http, Version=4.1.2.0
(https://www.nuget.org/packages/NETStandard.Library/#versions-body-tab)
Nuget 本身的存储库时间戳为 18.12.2018 https://nuget.info/packages/NETStandard.Library/2.0.3
Nuget
System.Net.Http 4.3.4
(最后更新 09.10.2018)包含(netstandard1.3)System.Net.Http, Version=4.1.1.3
(
https://www.nuget.org/packages/System.Net.Http/#versions-body-tab)
Nuget 本身: https://nuget.info/packages/System.Net.Http/4.3.4
应该优先选择什么 - 相对于在库中将其用于
.NET Framework 4.8
和 .NET 6.0
中的其他应用程序?
IMO,不要使用任何一个包。至少,不是直接的。
如果您的项目面向 .NET Framework,请参考 GAC 中的
System.Net.Http
,这可以通过 <Reference Include="System.Net.Http" />
完成。如果您的项目是多目标的,则使用条件 Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' "
。
如果您的项目面向 .NET5 或更高版本,则 .NET SDK 已引用
System.Net.Http
。因此,不要明确引用 System.Net.Http 的任何内容。
如果您的项目面向 .NETStandard 2.0,则 .NET SDK 已引用 NETStandard.Library,但会自动将
PrivateAssets="all"
添加到包引用中,以便在项目打包时该包不会成为依赖项,并且包不会在 ProjectReferences 中传递使用。
因此,如果您的项目面向 .NETStandard:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</ProjectGroup>
</Project>
或者如果您的项目多目标 net48 和 net6.0:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net48;net6.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' ">
<Reference Include="System.Net.Http" />
</ItemGroup>
</Project>
现在您可以在任何 C# 文件中自由添加
using System.Net.Http;
,并且在运行时,.NET 将使用运行时附带的任何版本的 System.Net.Http.dll。
如果您的仓库中有很多项目,您可以将
ItemGroup
放入 Directory.Build.props 或 Directory.Build.targets 文件中,然后所有项目都会获得它。
许多 System.* 包(包括 System.Net.Http)在 nuget.org 上作为包发布,因为在 .NET Core 1.0 期间,.NET 团队尝试了一种不同的方式来允许客户获取系统包的安全修复程序。然而,反馈和第一手经验都不好,因此后来的 .NET Standard 具有仅用于编译时的 NETStandard.Library 元包(参考程序集),而现在修复已知的安全漏洞是通过安装较新的 .NET 运行时。所有那些版本号在 4.x 范围内的旧 System.* 软件包都应被视为旧版,最好避免使用。