はつねの日記

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関連だとか、カメラデバイス一覧だとかは簡単に取得できますね。

Azure Speech to Textにコミットメントレベル料金プランが登場

docs.microsoft.com

### コミットメントプランとは
コミットメント料金プランって、聞きなれないプラン名ですが、要するに利用時間にかかわらず毎月定額払いの料金プランです。
かといって定額使いたい放題ではなく、定額費用に応じて利用できる時間数がきまっています。

### コミットメントプランの利用時間上限と月額固定費用
Speech to Textの場合、
2,000時間|$1,600
10,000時間|$6,500
50,000時間|$25,000
という金額になります。

### 上限時間を超えたなら
では、上限時間を超えたらどうなるかといえば、コミットメントプランの時間単価での従量課金に移行します。
2,000時間|2,001時間以降は、$0.80/時間
10,000時間|10,001時間以降は、$0.65/時間
50,000時間|50,001時間以降は、$0.50/時間
ある意味安心な料金プランですね。

### Standardな従量課金プランよりお得
Standardプランだと1時間1$なのだいぶお安くなりますね。月何時間使うのかがみえてきたらコミットメントプランへの移行も検討してみるとコストが抑えられるかも。

ソリューションファイルをVisual Studio 2022用に変更する

f:id:hatsune_a:20211221115625p:plain
Visual Studio 2022をインストールすると、Visual Studio 2019で作成したソリューションファイルの右肩には「16」の数字が表示されるようになります。
これを、図の右のように数字がついていないソリューションファイルにするにはどうしたらいいでしょうか。

これは非常に簡単で

  1. Visual Studio 2022でそのソリューションファイルを開く
  2. ソリューションエクスプローラーでソリューションを選択
  3. [ファイル]-[xxxxx.slnの保存]メニューで上書き保存

とすればOKです。

この操作によってソリューションファイルの内容が
f:id:hatsune_a:20211221115934p:plain
から、
f:id:hatsune_a:20211221120208p:plain
に変更になります。

Visual Studio 2022の条件付きコンパイルの設定が素敵すぎる件

まずは、プロジェクトのプロパティの条件付きコンパイルシンボルを見てもらいたいです!
Visualf:id:hatsune_a:20211220135409p:plain
どのソリューション構成の時にどのようなシンボルがあるのか一目瞭然です。
また、ソリューション構成名がデフォルトでシンボルに入るのもいいですね。
.NET Frameworkから.NET 6に移行するとき、コードを変える必要はほぼないのですが、どうしても一部変更したいときようなときは
#if NETCOREAPP
(ここは.NET 6)
#else
(ここは.NET Framework
#endif
のような感じで条件コンパイルが可能です。
便利ですね。

.NET 6でWPFアプリを作成してみる

Visual Studio 2022を使うと、.NET 6でWPFアプリが作成できます。
Visual Studioのプロジェクトでアプリのプロパティを開くと、今までとは雰囲気の違う内容が表示されます。
f:id:hatsune_a:20211220132448p:plain
ターゲットOSや、サポートされているOSバージョンなどの指定ができるのは、XamarinっぽいというかUWPアプリっぽい感じです。
上の例では、Windows 7 SPを最小OSとして、ターゲットOSは10.0.17763.0(1809=Windows 10 October 2018 Updateですね)としています。
10.0.17763.0は、2021年5月11日にサポートが終了しているので、ターゲットは最新のWindows 10バージョンにするか、2022年5月までサポートがある18363でもよいかもしれませんね。

Visual Studio 2022 が利用可能になりました

Visual Studio 2022がついにGA(リリース)されました。
visualstudio.microsoft.com
いよいよ64bitなVisual Studioですよ。

ダウンロードも可能です。

ダウンロードしたらインストールですね。
f:id:hatsune_a:20211110100104p:plain

必要なワークロード(機能)だけ選択してサクッとインストールできます。
f:id:hatsune_a:20211110100253p:plain

今回の注目はなんといってもここですね。「.NET 6」そして「C# 10」。
f:id:hatsune_a:20211110100331p:plain

それでは、今日のこれからの時間は、新しいVisual Studoの探検を開始したいと思います。
また、後日!

.NETランタイムと.NETデスクトップランタイム

.NET Core系のランタイムには、.NET Runtimeと.NET Desktop Runtimeがあります。
dotnet.microsoft.com

.NET Runtimeはコンソールアプリを実行するためのランタイム群

.NET Runtimeに含まれているのは、.NET Core系(5や6も含む)のコンソールアプリを実行するのに必要なDLL群です。

.NET Desktop Runtimeは、UI系DLL

.NET Desktop Runtimeには、WPFWindowsフォーム関連のDLLなどのUI系DLLが含まれています。
なお、.NET Desktop Runtimeを動作させるには.NET Runtimeが必要となります。
しかし、「.NET Desktop Rutimeのインストーラー」には、.NET Runtimeも含まれていて自動的にインストールされるので、「.NET Desktop Runtimeには.NET Runtimeが必要」というのは意識することは少ないでしょう。