.NET for Universal Windows Program是.NET Core的一个子集吗?

时间:2016-07-31 02:35:23

标签: .net win-universal-app .net-core

我的困惑是我读到UWP使用.NET Core,但是对于UWP而言,它是一个独立的.NET。 API文档here。另外,我在UWP项目中找不到一些.NET Core功能。

3 个答案:

答案 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.4netcoreapp1.0实现netstandard1.6netstandard1.4的严格超集)(platform standard documentation)。但是,两个应用程序模型都为其添加了大量额外的库(uap10.0添加了例如Windows.*库,而netcoreapp1.0的库称为Microsoft.NETCore.AppNuGet)像不可变集合,网络,文件系统,加密和其他在.NET实现中未标准化的东西。)
  • 术语“.NET Core”基本搞砸了。运行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。