移行パスを選択する

既存のWPF、WinForms、または Win32 デスクトップ アプリがある場合は、それを先に進める 3 つの広範なオプションがあります。 このガイドは、プロジェクトに適合するパスを決定するのに役立ちます。

Important

WinUI 3 に移行する必要はありません。 WPFと WinForms は最新の.NETで完全にサポートされており、引き続き機能更新プログラムを受け取ります。 多くのアプリは、最新の.NETにアップグレードし、UI フレームワークを変更せずにWindows アプリ SDK機能を段階的に追加することで最適です。

このページで使用される用語の定義については、「移行の 用語」を参照してください。

Tip

コードを変更する前に、 AI アシスタントで最新化を計画するを 使用して、AI コーディング アシスタントでプロジェクトを分析し、このドキュメントに基づいている増分計画を下書きします。

意思決定の概要

3 つの移行パスを示すデシジョン ツリーフローチャート: モダン .NETへのアップグレード、インプレース モダン化、WinUI 3 への移動。

3 つのパス

Path 変更内容 最適な用途 リスク レベル
場所を変えずにアップグレード ランタイム (.NET Framework →モダン .NET)、プロジェクト ファイル形式、一部の NuGet パッケージ 現在は適切に機能し、長期的な.NETのサポート、パフォーマンスの向上、最新の.NET API へのアクセスが必要なアプリ 低〜中程度
そのままモダナイズする 何も必要ありません。既存のアプリに Windows アプリ SDK、WinRT API、または MSIX パッケージを追加するだけです UI フレームワークを変更せずに特定のプラットフォーム機能 (通知、ウィジェット、AI) を必要とするアプリ
WinUI 3 に移動する UI フレームワーク、名前空間、コントロール、アプリ ライフサイクル モデル ビューを段階的に移植するか、新しいプロジェクトを開始するかに関係なく、UI レイヤーで更新が必要なアプリ 中 ~高

Note

これらのパスは相互に排他的ではありません。 一般的なシーケンスは、.NET Framework からモダン .NETにアップグレードしてから、Windows アプリ SDK機能を追加して最新化し、後で個々のビューを WinUI 3 に移行することです。

意思決定の基準

次の表を使用して、プロジェクトに適合するパスを評価します。 各行にスコアを付け、最も好ましい回答を持つ列を確認します。

基準 インプレース アップグレード 既存環境で最新化する WinUI 3 に移動する
プロジェクト サイズ(10個以上のプロジェクトを含むソリューション) ✅ 自動ツールでマルチプロジェクト ソリューションを処理する ✅ プロジェクトの再構築は必要ありません ⚠️ プロジェクトごとの移行計画が必要
.NET Framework の依存関係 ✅主な目標は、.NET Framework から移行することです N/A - アプリは現在のランタイムにとどまります ⚠️ 最新の.NETに最初にアップグレードする必要があります
WCF または ASMX サービス ⚠️ CoreWCF の移行が必要 ✅ サービス レイヤーへの影響なし ⚠️ 同じ WCF 移行が必要
COM interop ⚠️徹底的にテスト - ほとんどのCOM相互運用機能は、最新の.NETで動作します ✅ 変更は必要ありません ⚠️ ほとんどの COM 相互運用機能。一部の WinRT API には HWND の初期化が必要です
サードパーティの UI コントロール (Telerik、DevExpress、Syncfusion) ✅ほとんどのベンダーは最新の.NETをサポートしています ✅ UI の変更なし ❌ ベンダーは WinUI 3 版を提供する必要があります — 互換性を確認してください
チーム容量 低から中 — GitHub Copilotアップグレードが役立ちますが、依存関係を確認し、結果を検証する必要があります 低 — 増分、期限なし High — UI の開発とテストが必要
Visual Studio XAML デザイナー ✅モダン .NETでのWPFに対してサポートされます ✅ サポートされています WinUI 3 ではまだ使用できません
長期的な.NETサポート ✅ LTS のサポートとパフォーマンスの向上 ⚠️ .NET Framework 4.8 はサポートされていますが、セキュリティ修正プログラムのみを受け取ります ✅WinUI 3 は最新の.NET (.NET 6 以降) で実行されます

パス 1 — インプレースでのアップグレード (.NET Framework → 最新の .NET)

このパスは UI フレームワーク (WPF または WinForms) を保持し、ランタイムを .NET Framework から最新の.NET (現在は 10 LTS .NET) に移動します。 これは、ほとんどのエンタープライズ アプリのリスクが最も低いオプションです。

このパスを選択するタイミング

  • アプリはWPFまたは WinForms で適切に動作するため、その状態を維持する必要があります。
  • .NET の継続的なサポート、パフォーマンスの向上、または最新の .NET API(Span<T>、System.Text.Json、null 許容参照型)へのアクセスが必要です。
  • Windows アプリ SDK機能を追加して、後で最新化する予定です。

始め方

  1. GitHub Copilotアップグレードを使用してソリューションを評価し、アップグレードを計画します。
  2. 依存関係の問題を解決する — ほとんどの NuGet パッケージには最新の.NETバージョンがあります。
  3. WCF やなどのSystem.Configurationに対処します。
  4. 完全にテストします。特に COM 相互運用機能とサード パーティ製のコントロールをテストします。

AIツール群

GitHub Copilotアップグレードは、評価、計画、コード変更、検証に役立ちます。 推奨事項を確認し、アプリの各変更を検証します。

パス 2 - 最新化

このパスは、UI フレームワークを変更せずに、既存のWPF、WinForms、または Win32 アプリに最新のWindows機能を追加します。

このパスを選択するタイミング

  • 特定のWindows機能 (通知、ウィジェット、Windows AI Foundry) が必要です。
  • クリーン アンインストールと自動更新のために、インストーラーを MSIX に置き換えます。
  • アプリは .NET Framework 上にあり、今すぐアップグレードすることはできません。

始め方

3 つの最新化アプローチ (WinRT API、Windows アプリ SDK NuGet、MSIX パッケージ) については、デスクトップ アプリの最新化に関する記事を参照してください。

パス 3 - WinUI 3 に移動する

このパスは、アプリの UI レイヤーを、最新のWindows アプリのネイティブ UI フレームワークである WinUI 3 に移動します。 既存のビューを段階的に移植するか、新しい WinUI 3 プロジェクトを開始し、ビジネス ロジックを引き継ぐことができます。どちらの方法でも、宛先は同じです。

このパスを選択するタイミング

  • Fluent Design、ダーク モード、モダン入力のサポートを備えたモダン UI が必要です。
  • アプリの UI レイヤーは更新の期限です。
  • UI の開発とテストの時間に投資できます。

始め方

Important

C# WinUI 3 アプリには最新の.NETが必要であり、.NET Framework をターゲットにすることはできません。 C# アプリが .NET Framework 上にある場合は、まず (パス 1) アップグレードしてから、UI を移行する必要があります。 C++/WinRT WinUI 3 アプリでは、.NETは必要ありません。

一般的な移行の阻害要因

これらの問題により、アップグレードや移行が頻繁にブロックまたは複雑になります。 それぞれに特定の軽減策が必要です。

阻害要因 影響 緩和策
WCF サービス WCF サーバーは、最新の.NETでは使用できません。 WCF クライアントは、 System.ServiceModel パッケージを介して使用できます。 サーバー側 WCF を CoreWCF または gRPC に移行します。 クライアント側 WCF は、最新の.NETで動作します。
ASMX Web サービス ASMX は最新の.NETでは使用できません。 ASP.NET Core Web API または最小限の API エンドポイントに置き換えます。
System.Configuration (app.config) ConfigurationManager は互換性のある NuGet パッケージを介して最新の.NETで動作しますが、すべての機能をサポートしているわけではありません。 新しいコードの場合は、appsettings.jsonを使用します。 既存の設定を段階的に移行します。
COM interop ほとんどの COM 相互運用機能は、最新の.NETで動作します。 アパートのスレッド処理や登録不要の COM を含む一部のシナリオでは、テストが必要です。 COM に依存する機能を早期にテストします。 新しい相互運用コードには ComWrappers を使用します。
サード パーティの UI コントロール コントロール ベンダーはまだ WinUI 3 をサポートしていない可能性があります。 ほとんどの場合、WPFと WinForms の最新の.NETがサポートされています。 開始する前に、最新の.NETと WinUI 3 のサポートについてベンダーのドキュメントを確認してください。 Telerik、DevExpress、Syncfusion、Infragistics はすべて互換性マトリックスを発行します。
Visual Basic プロジェクト Visual Basicは最新の.NETのWPFと WinForms でサポートされていますが、GitHub Copilotアップグレード ワークフローではVisual Basic プロジェクトが完全にはサポートされていません。 WPF または Windows フォーム の手動アップグレード ガイダンスに従って、各プロジェクトを検証してください。

こちらも参照ください