2

当我创建一个针对 netstandard1.2、netstandard2.0 和 net45 的多目标 .NET csproj 时,我是否必须在 .csproj 部分中包含两个 netstandard 名字对象,或者仅提及 netstandard1.2 就足够了(较低的网络标准版本)?

建议一:

<TargetFrameworks>netstandard1.2;net45</TargetFrameworks>

提案 B:

<TargetFrameworks>netstandard1.2;netstandard2.0;net45</TargetFrameworks>

4

2 回答 2

1

是的,netstandard1.x 和 netstandard2.x 的行为有所不同。

来自微软文档

✔️ 如果您需要目标,请 务必包含  目标。netstandard2.0netstandard1.x

所有支持 .NET Standard 2.0 的平台都将使用该 netstandard2.0 目标并受益于拥有更小的包图,而旧平台仍然可以工作并回退到使用该 netstandard1.x 目标。

上面的一段解释了差异:

.NET Standard 1.x 作为一组细粒度的 NuGet 包分发,这会创建一个大型包依赖关系图,并导致开发人员在构建时下载大量包。现代 .NET 平台,包括 .NET Framework 4.6.1、UWP 和 Xamarin,都支持 .NET Standard 2.0。如果您特别需要针对较旧的平台,则应仅针对 .NET Standard 1.x。

netstandard1.x使用 nugets 支持 2 个框架,这会导致导入许多包。

于 2019-01-16T15:44:23.210 回答
0

当我检查 NuGet 包(1)(2)的依赖关系时<TargetFrameworks>netstandard1.2;net45</TargetFrameworks>,我看到 netstandard1.2 包括NETStandard.Library (>=1.6.1)这可能是@Baruch 的答案中描述的“依赖关系图” .<TargetFrameworks>netstandard1.2;netstandard2.0;net45</TargetFrameworks>

ObjectDumper.Net 依赖(一)

仅带有 netstandard1.2 的 ObjectDumper.NET

ObjectDumper.Net 依赖(2)

带有 netstandard1.2 和 netstandard2.0 的 ObjectDumper.NET

据我所知,<TargetFrameworks>netstandard1.2;net45</TargetFrameworks>如果我想同时支持 netstandard1.2 和 netstandard2.0,我可以使用。使用 netstandard1.2 NuGet 包的 netstandard2.0 项目引用 NETStandard.Library 2.0.3(满足最低要求 >=1.6.1)。因此,不会安装不必要的 NuGet 包。

于 2019-01-17T07:43:02.473 回答