我正在创建一个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吗?还是我(包装供应商)应该如何控制呢?
答案 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文件夹中选择程序集。