既存のWPF、WinForms、または Win32 デスクトップ アプリがある場合は、それを先に進める 3 つの広範なオプションがあります。 このガイドは、プロジェクトに適合するパスを決定するのに役立ちます。
Important
WinUI 3 に移行する必要はありません。 WPFと WinForms は最新の.NETで完全にサポートされており、引き続き機能更新プログラムを受け取ります。 多くのアプリは、最新の.NETにアップグレードし、UI フレームワークを変更せずにWindows アプリ SDK機能を段階的に追加することで最適です。
このページで使用される用語の定義については、「移行の 用語」を参照してください。
Tip
コードを変更する前に、 AI アシスタントで最新化を計画するを 使用して、AI コーディング アシスタントでプロジェクトを分析し、このドキュメントに基づいている増分計画を下書きします。
意思決定の概要
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機能を追加して、後で最新化する予定です。
始め方
- GitHub Copilotアップグレードを使用してソリューションを評価し、アップグレードを計画します。
- 依存関係の問題を解決する — ほとんどの NuGet パッケージには最新の.NETバージョンがあります。
- WCF やなどの
System.Configurationに対処します。 - 完全にテストします。特に 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 の開発とテストの時間に投資できます。
始め方
- WPFアプリ パターンを WinUI 3 (コントロール、XAML、スレッド マッピング) に移行する
- WPF アプリを AI を使用して WinUI 3 に移行する - GitHub Copilotによる AI 支援型の移行
- UWP から Windows アプリ SDK に移行する - 開始点が UWP の場合
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 フォーム の手動アップグレード ガイダンスに従って、各プロジェクトを検証してください。 |
こちらも参照ください
Windows developer