当我创建一个以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>
答案 0 :(得分:1)
是的,netstandard1.x和netstandard2.x的行为有所不同。
✔️如果需要
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依赖项(2)
据我所知,如果我想同时支持netstandard1.2和netstandard2.0,可以使用<TargetFrameworks>netstandard1.2;net45</TargetFrameworks>
。使用netstandard1.2 NuGet包的netstandard2.0项目引用NETStandard.Library 2.0.3(满足最低要求> = 1.6.1)。因此,不会安装不必要的NuGet软件包。