.NET アップグレード アシスタントを使用して UWP から Windows App SDK に移行する
注意点
移行前に現環境と上記リンクの表と精査する必要があります。
.NET アップグレードアシスタントを実際に使う
.NET アップグレードアシスタントをインストール
手順はMSドキュメントにあります。どうやらWPFからも可能らしい。
対象UWPアプリ
今回はこのUWPアプリを使用してみる。ソリューション構成は、
- NoahSokusha.csporj
- PackageNoahSokusha.wapproj
- TestNoahSokusha.csproj
となっています。
結果
NoahSokusha.csporjをアップグレード
- [管理者権限]でVisualStudioを起動
- プロジェクトを右クリック上から3つ目のUpgradeを実施。
- MSの言うとおりに[In-Place upgrade]を選択。
- [.NET7.0]を選択。[.NET8.0]はGo Liveだったはず。Visual Studio2022ではPreviewと表示されている?
- 全選択して[Upgrade]
- 無事アップグレード完了
無事ビルドエラーが発生。
無事ビルドエラーが発生。以下、対応内容(主にUWPだからというのが大きいです。)
- 一旦、UnitTestやPackageプロジェクトをアンロード
- 対象プロジェクトのプロパティから[アプリケーション]->[全般]->[出力の種類]を「コンソールアプリケーション」→「Windowsアプリケーション」に変更。
- Resources.reswは、resxに名前を変更する。(通常プロジェクトですと、「Property」もしくは、Resourcesで管理する。場合によってはそこら辺に移動させる。)
- ここで一旦コミットした方がいいかも。というのもGitの場合、内容変更+ファイル名変更は一度に出来ない。
- MainWindowが自動生成されているので、UWPのMainPageは、Windowに名称を変更。クラスに置き換える。
- 「Improper project configuration: WindowsPackageType is set to None, but a AppxManifest is specified.」と出力される。
このエラーメッセージは、プロジェクトの設定が適切でないことを示しています。具体的には、csprojectのWindowsPackageTypeがNoneに設定されている一方で、AppxManifestが指定されている事に起因します。私の場合、パッケージは別プロジェクトで管理をしていますので、アップグレードツールによって追加された「AppxManifest.xml」を削除。 - 「Microsoft.Graphics.Canvas.winmd 参照できません。.NET 5 以上のターゲットを設定する場合、Windows Metadata コンポーネントを直接参照することはできません。」と出てくる。これは、UWP関連の「Win2D.uwp」を使用している事に起因。該当Nugetを削除。(これが大苦戦しました。したがって、アップグレードツールはNugetに触れていないので重点的にチェックする必要があります。)
MVVM実装している場合
Prism使っているか等々千差万別。私は下記記事を参考にCommunityToolkit.Mvvmに移行。
その他プロジェクト
PackageNoahSokusha.wapproj、TestNoahSokusha.csprojを指定通りに実施。ビルドエラーがでる。とりあえず目標は、NoahSokushaなのでアップグレードはまたの機会に。
コードとか色々載せてるけど大丈夫かNoahSokusha?
元々はOpenSourceにして誰かに作ってもらって私はノアちゃんのプロモ動画や別便利ツールを作る予定でした。なので、色々とコードを貼り付けています。
しかし、それは諸事情で断念。いずれ、理由は発表もしくは問題の解消によりOpenSource化します。
コメント