2016-07-31 71 views
5

我的困惑是我读到UWP使用.NET Core,但是有一个单独的“.NET for UWP”API文档here。另外,我在UWP项目中找不到某些.NET Core功能。.NET是否为通用Windows编程.NET Core的子集?

+0

您是否阅读过[.NET平台标准](https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md)?这可能会略微清除它。 – yaakov

回答

4

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

UWP Api也是.NET API的一个子集,它可以在.NET Core上运行。它也有一些UWP独有的API。 UWP应用程序可以是.NET核心应用程序,但反过来并不一定是这样。并非所有的.NET核心应用程序都是UWP应用程序。

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

10

不,UWP是一个不同的API,它针对不同的窗口模型,取代传统WINAPI的大部分。你会得到一个.NETCore依赖项,因为VS中的项目模板选择了它。有一个很好的理由,你只能从.NETCore获得UWP(通用Windows平台)中的U,手机和Hololens等设备没有完整的.NET框架版本。试图在移动应用中具有竞争力是UWP的核心原因。

UWP是一个基于COM的api,它为什么与Javascript和C++等语言一起工作的基本原因。否则,隐藏得很好,传统的COM类型库格式被替换为.winmd,这是一种基于.NET元数据格式的格式。它可以模拟COM不支持的功能,如泛型,静态方法和实现继承。 CLR中内置了获得此仿真所需的语言预测。他们可以做的不多,使例外更好地工作。

您也可以在桌面应用程序中使用UWP api。微软不鼓励这样做,所以你从项目模板中得不到任何帮助。易于使用文本编辑器进行修复,将<TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion>添加到.csproj文件中,现在可以使用“项目”>“添加引用”并选择一个UWP合约。方便地利用设备命名空间。

+1

我不知道你可以在桌面应用程序中使用UWP。任何额外信息的来源,如限制或任何东西?这听起来很棒。 – FriendlyGuy

+0

它的原始文章有点晚了 - 但是为了解决'从桌面调用uwp',你可以使用UWP Desktop软件包。 https://www.nuget.org/packages/UwpDesktop –

9

直答:不,它不是!

龙答:很复杂

  • uap10.0(UWP)和netcoreapp1.0(跨platoform .NET核心)都争相应用模型/ SDK /平台(不管术语微软选择提下一个)。我在此使用目标框架标记(技术术语)以避免围绕术语“.NET核心”出现混淆。 uap10.0专注于基于Windows的UI应用程序,而netcoreapp1.0基本上是跨平台的控制台应用程序(与任何程序都可以运行服务器一样,如ASP.NET)。
  • 超集/子集问题很棘手。它们重叠。 uap10.0实施netstandard1.4netcoreapp1.0实现netstandard1.6(这是一个严格的超集netstandard1.4)(platform standard documentation)。然而,这两个应用程序模型都增加了重要的附加库(uap10.0增加了例如Windows.*库,而netcoreapp1.0的库被称为Microsoft.NETCore.AppNuGet))添加了诸如不可变集合,网络,文件系统,密码术和其他未标准化的东西跨.NET实现)。
  • 术语“.NET核心”基本上是搞砸了。运行uap10.0/UWP的CLR源自Silverlight,其标记为运行时coreclr。现代跨平台netcoreapp1.0使用从UWP项目派生的CLR。基于System.Runtime而不是基于mscorlib的库的情况也是如此。