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

Is .NET for Universal Windows Program a subset of .NET Core?

我的困惑是我读到 UWP 使用 .NET Core,但是有一个单独的“.NET for UWP”API 文档 here。另外,我在我的 UWP 项目中找不到一些 .NET Core 功能。

.NET Core 是 .NET 的跨平台子集,可用于为 Windows、Linux、Mac 以及 UWP 构建应用程序。

UWP Api 也是 .NET API 的一个子集,可以 运行 在 .NET Core 上。它还具有许多 UWP 独有的 API。 UWP 应用程序可以是 .NET 核心应用程序,但反之则不一定成立。并非所有 .NET 核心应用都是 UWP 应用。

就像 .NET Core 的 API 仅适用于 Linux 或 Mac。

不,UWP 是一个独特的 api,它针对不同的窗口模型,取代了传统 winapi 的大部分内容。您获得 .NETCore 依赖项是因为 VS select 中的项目模板。有充分的理由,您只能从 .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 文件,现在您可以使用项目 > 添加引用和 select UWP 合同。方便利用设备名称空间。

直接回答:不,不是!

长答案:这很复杂

  • uap10.0 (UWP) 和 netcoreapp1.0(跨平台 .NET Core)是相互竞争的应用程序模型/SDK/平台(Microsoft 接下来选择提及的任何术语)。我在此处使用目标框架名称(技术术语)以避免混淆术语“.NET Core”。 uap10.0 专注于基于 Windows 的 UI 应用程序,netcoreapp1.0 基本上是跨平台的控制台应用程序(就像任何程序一样,可以 运行 服务器,例如 ASP.NET).
  • 超集/子集问题很棘手。它们重叠。 uap10.0 实现了 netstandard1.4 并且 netcoreapp1.0 实现了 netstandard1.6(这是 netstandard1.4 的严格超集)(platform standard documentation). However, both application models add significant additional libraries to it (uap10.0 adds e.g. the Windows.* libraries, while the library for netcoreapp1.0 called Microsoft.NETCore.App (NuGet)添加了不可变集合之类的东西、网络、文件系统、密码学和其他尚未在 .NET 实现中标准化的事物)。
  • 术语“.NET Core”基本上搞砸了。 运行s uap10.0/UWP 的 CLR 源自 Silverlight,它标记了它的 运行time coreclr。现代跨平台 netcoreapp1.0 使用从 UWP 项目派生的 CLR。对于在所有情况下都是基于 System.Runtime 而不是基于 mscorlib 的库也是如此。

2019 年 8 月更新

  • 到现在uap10.xnetcoreapp3.x还是一样的区别。但是,它们都实现了 netstandard2.x(mono 和 unity 也是如此)。 netstandard2.x 子集是一个重要的 API 表面,使大多数 nuget 包都与两者兼容。
  • 据我了解,netcoreapp3.x 可以访问 winrt API 表面的很大一部分,其中包含 COM 支持(涵盖 winrt com 和传统 COM)。这使得 netcoreapp3.x 交集非常重要。这计划于 2019 年晚些时候进行。
  • netcoreapp3.0 还将支持 WPF 和 WinForms 以及其他 .NET Framework 库。 uap10.0.
  • 永远不会支持这些
  • UWP 技术堆栈(多层)现在支持 packaging/store 处理任何类型的应用程序(不仅 uap/winrt 一次)。
  • .NET 5 和 6 带来了真正有趣的东西。Java、WebAssembly 和 Swift 互操作、AOT 编译和 MonoVM。可访问的图书馆表面和部署位置将爆炸。