我的困惑是我读到UWP使用.NET Core,但是对于UWP而言,它是一个独立的.NET。 API文档here。另外,我在UWP项目中找不到一些.NET Core功能。
答案 0 :(得分:14)
不,UWP是一个独特的api,针对不同的窗口模型,取代了传统winapi的大部分。您获得了.NETCore依赖项,因为VS中的项目模板选择它。有充分的理由,你只能从.NETCore获得UWP(通用Windows平台)中的U,而像手机和Hololens这样的设备没有完整的.NET框架版本。试图在移动应用程序中具有竞争力是UWP的核心原因。
UWP是一个基于COM的api,这是它与Javascript和C ++等语言协同工作的基本原因。否则很好地隐藏,COM的传统类型库格式被替换为.winmd,这种格式主要基于.NET的元数据格式。它可以模拟COM无法支持的功能,如泛型,静态方法和实现继承。进行此仿真所需的语言投影内置于CLR中。他们可以做的不是让异常更好地工作。
您也可以在桌面应用中使用UWP API。 Microsoft不鼓励这样做,因此您无法从项目模板中获得帮助。使用文本编辑器轻松修复,将<TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion>
添加到.csproj文件中,现在可以使用Project&gt;添加参考并选择UWP合同。方便利用设备名称空间。
答案 1 :(得分:14)
直接回答:不,不是!
长答案:这很复杂
uap10.0
(UWP)和netcoreapp1.0
(跨平台.NET Core)是竞争的应用程序模型/ SDK /平台(微软下一步提到的术语)。我在此处使用目标框架标记(技术术语)以避免混淆“.NET Core”一词。 uap10.0
专注于基于Windows的UI应用程序,而netcoreapp1.0
基本上是跨平台的控制台应用程序(类似于任何程序都可以运行服务器,如ASP.NET)。uap10.0
实现netstandard1.4
和netcoreapp1.0
实现netstandard1.6
(netstandard1.4
的严格超集)(platform standard documentation)。但是,两个应用程序模型都为其添加了大量额外的库(uap10.0
添加了例如Windows.*
库,而netcoreapp1.0
的库称为Microsoft.NETCore.App
(NuGet)像不可变集合,网络,文件系统,加密和其他在.NET实现中未标准化的东西。)uap10.0
/ UWP的CLR派生自Silverlight,后者标记了其运行时coreclr
。现代跨平台netcoreapp1.0
使用从UWP项目派生的CLR。对于在所有情况下都基于System.Runtime
而不是基于mscorlib
的库,情况也是如此。答案 2 :(得分:5)
.NET Core是.NET的跨平台子集,可用于构建适用于Windows,Linux,Mac和UWP的应用程序。
UWP Api也是.NET API的一个子集,可以在.NET Core上运行。它还有许多UWP独有的API。 UWP应用程序可以是.NET核心应用程序,但反过来不一定如此。并非所有.NET核心应用都是UWP应用。
就像.NET Core的API只适用于Linux或Mac。