并发多目标netstandard1.0和netstandard2.0?

时间:2019-01-16 08:42:54

标签: csproj multitargeting dotnet-sdk

当我创建一个以netstandard1.2,netstandard2.0和net45为目标的多目标.NET csproj时,我是否必须在.csproj的部分中同时包含这两个netstandard名称,或者仅仅提及netstandard1就足够了.2(较低的netstandard版本)?

提案A:

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

提案B:

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

2 个答案:

答案 0 :(得分:1)

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

来自Microsoft docs

  

✔️如果需要netstandard2.0目标,请包括一个netstandard1.x目标。

     

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

上面的一段解释了其中的区别:

  

.NET Standard 1.x作为NuGet软件包的精细集进行分发,这会创建较大的软件包依赖关系图,并导致开发人员在构建时下载了大量软件包。包括.NET Framework 4.6.1,UWP和Xamarin在内的现代.NET平台均支持.NET Standard 2.0。如果您特别需要定位较旧的平台,则仅应定位.NET Standard 1.x。

netstandard1.x通过使用nuget支持2个框架,这导致许多软件包的导入。

答案 1 :(得分:0)

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

ObjectDumper.Net依赖项(1)

ObjectDumper.NET with netstandard1.2 only

ObjectDumper.Net依赖项(2)

ObjectDumper.NET with netstandard1.2 and netstandard2.0

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