介紹如何使用 .NET Framework, .NET Core 和 .NET 5 如何使用 WinRT API
早在 Windows 8 的時候就有開始加入Windows Runtime的概念,然而到UWP才開始讓整體應用程式比較能夠跨裝置或跨OS的方式來實作。目前已經有很多種方式存取 WinRT 的 API 了,這邊做個總整理!
開發環境
- Windows 10 20H2
- Visual Studio 2019
- Windows 10 SDK latest ( 10.0.19041.* )
專案類型是 .NET Framework 以及 .NET Core
在的 .NET Framework / .NET Core 上使用可以兩種不同的方式存取 WinRT API
- Nuget package
- Assembly reference
先來說如何加入 Assembly reference 好了,因為這種方式可以讓開發人員針對更多舊版本的OS進行支援! 重點是要將兩個檔案參考到現行的參考中,分別如下
- Windows.winmd
- System.Runtime.WindowsRuntime.dll
而 Windows.winmd的路徑取決在安裝的 Windows 10 SDK!如果有裝越多版本的就可以支援到越舊的OS版本,路徑如下
檔案路徑裡面的 Windows 10 SDK version就是如下表
10.0.10240.* |
10.0.10586.* |
10.0.14393.* |
10.0.15063.* |
10.0.16299.* |
10.0.17134.* |
10.0.17763.* |
10.0.18362.* |
10.0.19041.* |
目前有正式支援的 Windows 10 SDK 版本主要有這幾版號,但是因為 Visual Studio 2019 現在只會列出 16299以上的版本,如果有些開發人員需要支援較舊版本的 Windows 10 卻需要使用 WinRT API 那就需要自行安裝了!安裝舊版 Windows 10 SDK 的連結在這
( Windows SDK and emulator archive )
然後另外一個 System.Runtime.WindowsRuntime.dll的路徑如下
將兩個參考加入到專案中就可以存取 WinRT API 了! 如下圖使用 .NET Framework WPF 專案
這樣就可以在 C# WPF ( .NET Framework ) 中使用Windows Runtime API
接著另外一種方式是加入 nuget package的方式!使用Visual studio 對專案右鍵的 nuget package 尋找
然後再 .NET 5的部分有了很大的調整! 由於從 .NET 5.0開始是把 .NET Framework, .NET Core, Mono 整併起來的第一個版本。所以也算是開啟了合併框架層的第一步! 而在 .NET Core延續下來的 csproj 新格式讓編輯專案細項項目變得非常方便,而在 .NET5.0也有針對 OS的 TargetFramework,這邊要是使用 Windows Runtime API 就直接修改一下 TFM ( TargetFramework Moniker ) 目前有支援從 .NET5.0 修改 TargetFramework來使用 Windows Runtime API的版本如下
10.0.17763.0 |
10.0.18362.0 |
10.0.19041.0 |
直接修改 csproj 幾個部份讓 .NET5.0能夠使用 Windows Runtime API,以下是使用 WPF
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFramework>net5.0-windows10.0.19041.0</TargetFramework>
<UseWPF>true</UseWPF>
<OutputType>WinExe</OutputType>
</PropertyGroup>
</Project>
以下是使用 Windows Forms
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFramework>net5.0-windows10.0.19041.0</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<OutputType>WinExe</OutputType>
</PropertyGroup>
</Project>
重點是要用 WindowsDesktop 的 Sdk 然後修改 TargetFramework 最後再看看要使用 WPF or WindowsForms 這兩個框架或是不使用。 下圖是使用WPF配合 .NET 5.0 以及修改TFM的DEMO
可以參考此連結 ( Calling Windows APIs in .NET5 - Windows Developer Blog ) 以及這個連結 ( Call Windows Runtime APIs in desktop apps - Windows applications | Microsoft Docs ) 有更多詳細的解釋。
***以上Code以及說明都有可能隨著Windows 10 的版本以及Visual Studio 版本有所調整!***
參考資料 Microsoft Docs,Windows Blogs for developer
下次再分享Windows 10 的新技術拉~