uap10.0 netstandard2.0在nuget中消除歧义

时间:2019-06-25 13:31:13

标签: visual-studio uwp nuget .net-standard-2.0

我正在创建一个Nuget程序包,其中包含我的DLL的uap10.0和netstandard2.0版本。

uap10.0实际上与.netstandard1.3兼容,并且可以用于Windows 10 Fall Creators Update之前的Windows上的Universal Windows应用程序。从Windows 10 Fall Creators Update开始,可以使用netstandard2.0。

我想知道Nuget如何选择要使用的版本。例如,如果我创建一个UWP项目并选择Target和Min版本作为Windows 10 Fall Creators,然后使用Install-package MyPackage,它将选择netstandard2.0或uap10.0版本的DLL吗?还是我(包装供应商)应该如何控制呢?

1 个答案:

答案 0 :(得分:1)

  

例如,如果我创建一个UWP项目并选择Target和Min   版本为Windows 10 Fall Creators,然后使用安装包   MyPackage,它将选择netstandard2.0或uap10.0版本的DLL吗?

我认为,它肯定会在UWP项目中选择uap10.0版本。

我为此进行了一些测试以检查结果,在UWP项目中,如果我们使用包含两个uap10.0 and netstandard2.0版本的软件包,它将始终选择uap10.0而不是{{1 }}版本。而且只有当我尝试使用仅包含.netstandard2.0版本的软件包时,UWP才会选择netstandard2.0一个软件包。

  

当NuGet安装具有多个程序集版本的软件包时,它将   尝试将程序集的框架名称与目标匹配   项目的框架。

请检查this official document,以便NuGet使用最匹配的程序集。(程序集的框架名称<=>项目的目标框架名称)

因此,更具体目标框架胜出。根据您的情况,在针对uap的UWP项目中,它将从包含多个版本的软件包中选择uap10.0版本。而且,您不需要控制它,只需要在打包之前将不同版本的程序集放在corresponding framework folder下即可。

更新

来自Alex提醒的想法。创建nuget包时,具有以下结构:

netstandard2.0

当UWP项目的最低版本为16299及更高版本时,它将选择uap10.0.16299文件夹中的.net标准版本。对于那些最小值小于16299的旧版本,它将从uap10.0文件夹中选择程序集。