NETStandard.Library 2.0.3 与 System.Net.Http 4.3.4 - 应该首选什么?

问题描述 投票:0回答:1

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
中的其他应用程序?

nuget .net-6.0 .net-standard .net-4.8
1个回答
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.propsDirectory.Build.targets 文件中,然后所有项目都会获得它。

许多 System.* 包(包括 System.Net.Http)在 nuget.org 上作为包发布,因为在 .NET Core 1.0 期间,.NET 团队尝试了一种不同的方式来允许客户获取系统包的安全修复程序。然而,反馈和第一手经验都不好,因此后来的 .NET Standard 具有仅用于编译时的 NETStandard.Library 元包(参考程序集),而现在修复已知的安全漏洞是通过安装较新的 .NET 运行时。所有那些版本号在 4.x 范围内的旧 System.* 软件包都应被视为旧版,最好避免使用。

© www.soinside.com 2019 - 2024. All rights reserved.