はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

.NET 6からWindows Runtime APIを呼ぶのが劇的に楽な件

## .NET 6以前
Windows 10の固有APIにアクセスする方法としては、Windows Runtime API (WinRT API) があります。
Windows Runtime APIはUWPアプリからはすごく使いやすかったのですが、.NET Frameworkから使おうとすると参照設定をしたり、デスクトップブリッジを使ったりと、ひと手間といわず数手間かかるような感じした。

## .NET 6以降
正確には、.NET 5でも同様のようですが、.NET 6では、Windows Runtime APIを使うための準備をほぼ意識しないレベルになっています。

### 準備
f:id:hatsune_a:20220125165818p:plain
Visual Studioでプロジェクトのプロパティで「ターゲットOS」を指定するところでWindows 10のバージョンを指定します。この指定によってcsprojファイルには次のようにWindows 10のランタイムバージョンが指定されます。
f:id:hatsune_a:20220125170057p:plain

### 使い方(コード編)
f:id:hatsune_a:20220125190835p:plain
普通に「Windows.」で始まる名前空間Windows Runtime APIのクラスが使えますね。

### 使い方(xaml編)
f:id:hatsune_a:20220125191342p:plain
Windows.UI.Xaml名前空間がないようです。
これは、Windows App SDK(旧名称は WinUI 3)に含まれているので、nugetでMicrosoft.WindowsAppSDKを追加すれば使えるようになるはずです。
どうして「はず」なのかといえば、確認するために使った.NET 6なWPFアプリがx86/x64/ARM/ARM64対応のものだったので、Windows App SDKがARMに対応していないというビルドエラーがでて動作確認までに至らなかったからです。
また、時間を見つけて確認してみたいと思います。

なにはともあれ、すごく楽にWindows Runtime APIが使えるようになったので、例えば、Bluetooth関連だとか、カメラデバイス一覧だとかは簡単に取得できますね。