Microsoft Buildで取り上げられたMAUIを試してみた系のメモです。
完全にPreviewのPreviewってレベルで、本当にバグでもなんでも来いの人が試すといいと思います。
Buildを見てすぐに試した人はPreview4のはずです。Preview4と5の話を色々していくので、適宜これは4の話です、5の話ですを書いていこうかなと。
6月11日にPreview5が利用出来るようになったので(アナウンスはまだなされていません)基本的にはPreview5を使ったほうがいいです(理由は後述)。
試行錯誤しているリポジトリは
github.com
こちらです、興味のある方はごらんください。
最初にやること
Getting Started · dotnet/maui Wiki · GitHub
これに沿って進めましょう。
今回はStep.1 でmauiプロジェクトではなくて、maui-blazorプロジェクトを作ります。
テンプレートやパッケージの更新
現在利用しているtemplateがどれかを確認します。
$ dotnet new -u
Currently installed items:
Microsoft.Maui.Templates
Version: 6.0.100-preview.4.634
Details:
Author: Microsoft
Templates:
.NET MAUI Blazor App (maui-blazor) C#
.NET MAUI App (maui) C#
Uninstall Command:
dotnet new -u Microsoft.Maui.Templates
こんな感じの表示が出たらPreview4のテンプレートです。
これをまずはアップデートしましょう。
$ dotnet new -u Microsoft.Maui.Templates
Success: Microsoft.Maui.Templates::6.0.100-preview.4.634 was uninstalled.
$ dotnet new -i Microsoft.Maui.Templates
The following template packages will be installed:
Microsoft.Maui.Templates
Success: Microsoft.Maui.Templates::6.0.100-preview.5.760 installed the following templates:
Template Name Short Name Language Tags
-------------------- ----------- -------- ------------------------------------------------
.NET MAUI App maui [C#] MAUI/Android/iOS/macOS/Mac Catalyst/WinUI
.NET MAUI Blazor App maui-blazor [C#] MAUI/Android/iOS/macOS/Mac Catalyst/WinUI/Blazor
こうすると最新のPreview5のテンプレートが降ってくるのでこれを使いましょう。
よりも、maui-checkをアップデートする方が自分の中では正解だなになったので、こっちをやっていきます。
$ dotnet tool update -g Redth.Net.Maui.Check
ツール 'redth.net.maui.check' がバージョン '0.5.0' からバージョン '0.5.5' に正常に更新されました。
$ maui-check --preview
(以下略)
で今日時点ではPreview5が降ってくるようになります。
テンプレートやWorkloadが同時にアップデートされるのでこれが推奨されるやり方でしょう。
ですが、これでPreview5関連パッケージ落としてきてもまだrestore出来ません。
dotnet restore
復元対象のプロジェクトを決定しています...
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: バージョン (= 6.0.0-preview.5.21301.5) のパッケージ Microsoft.NETCore.App.Runtime.Mono.iossimulator-x64 が見つかりません
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 1 バージョンが nuget に見つかりました。 [ 最も近いバージョン: 6.0.0-preview.4.21253.7 ]
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 0 バージョンが maui-preview に見つかりました
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: バージョン (= 6.0.0-preview.5.21301.5) のパッケージ Microsoft.NETCore.App.Runtime.Mono.android-arm64 が見つかりません
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 1 バージョンが nuget に見つかりました。 [ 最も近いバージョン: 6.0.0-preview.4.21253.7 ]
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 0 バージョンが maui-preview に見つかりました
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: バージョン (= 6.0.0-preview.5.21301.5) のパッケージ Microsoft.NETCore.App.Runtime.Mono.android-x86 が見つかりません
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 1 バージョンが nuget に見つかりました。 [ 最も近いバージョン: 6.0.0-preview.4.21253.7 ]
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 0 バージョンが maui-preview に見つかりました
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: バージョン (= 6.0.0-preview.5.21301.5) のパッケージ Microsoft.NETCore.App.Host.linux-arm64 が見つかりません
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 52 バージョンが nuget に見つかりました。 [ 最も近いバージョン: 6.0.0-preview.4.21253.7 ]
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 0 バージョンが maui-preview に見つかりました
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: バージョン (= 6.0.0-preview.5.21301.17) のパッケージ Microsoft.AspNetCore.App.Runtime.linux-arm64 が見つかりません
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 52 バージョンが nuget に見つかりました。 [ 最も近いバージョン: 6.0.0-preview.4.21253.5 ]
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 0 バージョンが maui-preview に見つかりました
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: バージョン (= 6.0.0-preview.5.21301.5) のパッケージ Microsoft.NETCore.App.Runtime.Mono.maccatalyst-x64 が見つかりません
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 1 バージョンが nuget に見つかりました。 [ 最も近いバージョン: 6.0.0-preview.4.21253.7 ]
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj : error NU1102: - 0 バージョンが maui-preview に見つかりました
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/tmp/tmp/tmp.csproj を復元できませんでした (1.92 sec)。
こんな感じで Microsoft.NETCore.App.Runtime.Mono.*
系統がrestore出来ないので、dotnet runtimeのnightlyを落とせるようにしましょう。
runtime/dogfooding.md at main · dotnet/runtime · GitHub
$ dotnet nuget add source -n dotnet6 https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet6/nuget/v3/index.json
これでrestore出来るようになります、スタートまでが遠い。
適宜パッケージのみのアップデートを行いたい場合は dotnet-outdatedを使うとかで上げるのがいいんじゃないかな。
コードの変更
Preview5のtemplateで作った場合ならここは無視してよいです。
Preview4でtemplateを作った場合はbinやobjディレクトリを消し去って、csprojを
- <PackageReference Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="6.0.100-preview.4.*" />
+ <PackageReference Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="6.0.100-preview.5.*" />
- <PackageReference Include="Microsoft.Maui" Version="6.0.100-preview.4.*" />
+ <PackageReference Include="Microsoft.Maui" Version="6.0.100-preview.5.*" />
こんな風にpreview5を使うようにします。
その状態でrestoreしてビルドすると
/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/MAUICameraSetting/Startup.cs(19,6): error CS1061: 'IAppHostBuilder' に 'UseMauiApp' の定義が含まれておらず、型 'IAppHostBuilder' の最初の引数を受け付けるアクセス可能な拡張メソッド 'UseMauiApp' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください [/Users/yamachu/Projects/github.com/yamachu/MAUICameraSetting/MAUICameraSetting/MAUICameraSetting.csproj]
こんな感じでパッケージ内部のnamespaceの変更に巻き込まれるので、Startup.csに
using Microsoft.Maui.Controls.Hosting;
を追加します。
これでビルドが通るようになります。
後で頑張って書く………
Preview4は
├── MAUICameraSetting.WinUI3
├── MAUICameraSetting.WinUI3\ (Package)
こんな感じで
Preview5だと
├── MAUICameraSetting.WinUI
になって色々変わってるんですよね…これはなんとかしないと。
あとPreview4だと
こんな感じで罠があったけれども、Preview5だとそれが解消されたので楽です。
Crash on startup of WinUI3 C# Project - Basic App Instructions - COMException: Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)) · Issue #848 · microsoft/ProjectReunion · GitHub
わかったきっかけとしてはこれ、難しすぎる。
まとめ
Migration面倒だから、とりあえずPreview5使っておいたほうがいい。
また、これはPreviewの更にPreviewってレベルのやつなので、ちゃんと公式がアナウンスしてから試したほうがいい。はい
他の記事で書くこと
の3本です、はい