Introduction
Visual Studio 2022 17.3 Preview を Hyper-V に入れた Windows 11 上で試してみた。
そのついでに .NET MAUI (.NET Multi-Platform App UI) でサンプルアプリを動かしてみた。
その過程で起きたトラブルのメモとか。
What happened?
MAUI のプロジェクトテンプレートが見当たらない
いきなりぶつかった壁。
Visual Studio の新規作成で MAUI のプロジェクトが見当たらなくて焦りました。
実は テンプレートがありません という既知の問題で、対応策がある。
1 | $ dotnet new maui |
コマンドプロンプトでプロジェクトを作れと。
えぇ…
ちなみに MAUI Templates are missing in VS 2022 17.3.0 Preview 1.1 という issue で
If the templates are not installed you can run dotnet new -i Microsoft.Maui.Templates to still get them. Please do not use the version that is at the end, especially not the one as advertized here because that is an older version. If you do not specify a version the newest ones will be installed.
とあるので、
1 | $ dotnet new -i Microsoft.Maui.Templates |
と試しても、何も変わらない状態だった。
nuget で復元できない
これもかなり謎。
プロジェクトを作成して試しにビルドした時のエラーがこちら。
Unable to find package Microsoft.Extensions.Configuration. No packages exist with this id in source(s): C:\Program Files\dotnet\library-packs, Microsoft Visual Studio Offline Packages
原因は nuget の設定が空になっていたこと。
なので、
nuget.org、https://api.nuget.org/v3/index.json を追加してあげる。
for Windows
開発者モードが必要
ビルドできるターゲットは下記のように現時点で 4 つある。
そのうち、Windows Machine をビルドしようとすると
This device needs to be set up correctly to develop this type of app for Windows. If you don’t, then you can’t install and test your app before you submit it to the Windows Store.
Go to settings for developers on your device, and select Developer Mode.
This device is not currently in developer mode.
開発者モードじゃないよ?って怒られる。
これは UWP でもお馴染みなので素直に従う。
設定変更後、ビルドが成功し、下記のアプリが起動する。
なお、パッケージされているのか、UWP でみたようなことになる。
for Android
Android Simulator が起動しない
結論から言うと、HAXM は使えないように思える。
インストールしても Visual Studio が認識なかったので。
対応策は Hyper-V なのだが、はまりどころが意外とある。
Nested Virtualization (入れ子になった仮想化) を有効化しろ
今回の検証が Hyper-V で行われているためで、本来の物理マシンでの作業ならこの作業は不要。
既定では Nested Virtualization は無効になっているため、個々の仮想マシンに対して設定を有効にしていく必要がある。
Powershell を起動し、設定を変更する仮想マシンがシャットダウンしていることを確認し、下記のコマンドを実行する。
1 | Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true |
この設定を行わないと、仮想マシン内で Hyper-V を有効化できない。
Hyper-V をインストールする
当たり前だが一応。
Windows の機能と追加から
- Hyper-V
- Windows Hypervisor Platform
をインストールする。
前者は無くてもいいかもしれないが、一応入れた。
Android SDK をインストール
Xamarin を使っていれば当たり前のこと。
適宜インストールすること。
Android Device Manager でデバイスを作成
これも Xamarin を使っていれば当たり前のこと。
今回は Android 11.0 API 30 の Pixel 5 を用意。
ここまでくれば、いつものごとく Android Simulator でアプリが動く。
for iOS
Xcode 13.3 が必要
無慈悲なエラー。
Xcode のサポートは下記の通り。
https://developer.apple.com/jp/support/xcode/
つまり、macOS Monterey 12 未満の OS では、MAUI で iOS アプリを作成できない。
どうしようもないので、素直にアップデートしましょう。
アップデートさえ終われば、これも Xamarin のように素直に起動する。
初期位置が他と違っておかしいのは原因不明。
(click me を押したら治った)
for macOS
Mac Catalyst のビルドは現在サポートしていません
だそうです。
今は mac から実行しろってことです。
Debugging Mac Catalyst on Windows is not currently supported.
ちなみに Mac Catalyst とは wiki によれば
macOS向けアプリの開発用フレームワークであり、アプリの実行環境
だそうです。
私はこの名前を見て思い出したのが AMD (Advanced Micro Devices, Inc.) のドライバソフトウェア AMD Catalyst。
No templates found matching
ところかわって macOS (Visual Studio 2022 for mac) からの実行。
Windows で見たような光景だが、こっちはコンソールから。
1 | % dotnet new maui |
これに対しては、下記のコマンドが必須。
1 | % dotnet new -i Microsoft.Maui.Templates |
nuget で復元できない
これは別の原因。
net6.0-maccatalyst を指定してビルドするつもりなのに、nuget の復元ではソリューション全部を指定しているから、それに引きずられてエラーになっている。
error NETSDK1147: このプロジェクトをビルドするには、次のワークロードをインストールする必要があります: maui-android
これらのワークロードをインストールするには、次のコマンドを実行します: dotnet workload restore
別に、対応する必要はないけど。
ちなみに管理者権限必須。
1 | % sudo dotnet workload restore |
Visual Studio for mac は立ち上げなおした方がいい。
再度ビルドするとアプリが起動する。