2016-07-31 59 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的庫的情況也是如此。