Visual Studio でホット リロードを使用して実行中のコードを記述およびデバッグする (C#、Visual Basic、C++)
Visual Studio 2022 以降、Visual Studio のホット リロード エクスペリエンスは、マネージド .NET アプリとネイティブ C++ アプリの両方で機能します。 作業しているアプリの種類に関係なく、ホット リロードの目的は、編集の間にできるだけ多くのアプリの再起動を保存することです。これにより、アプリのリビルド、再起動、アプリ自体の以前の場所への再移動の待機に費やす時間が短縮され、生産性が向上します。
アプリケーションのコード ファイルを編集し、コードの変更を実行中のアプリケーション (ホット リロードとも呼ばれます) にすぐに適用できるため、生産性が向上します。 変更が適用されたら、アプリ自体でアクションを実行して (または何らかのタイマーなどを使用して) コードをもう一度再実行し、変更をすぐに確認します。ブレークポイントを使用してアプリを一時停止する必要はありません。
ホット リロードを使用して実行中のコードを更新する
サポートされているアプリケーションの種類に基づいてプロジェクトを開きます。 サポートされているアプリケーション .NET と C++ を参照してください。
F5 を使用するか、がサポートされている場合は、Ctrl + F5 をしてデバッガーをアタッチしてアプリを起動します。
コード ファイルを開き、コードを変更します。
ホット リロード ボタンを使用してコードの変更を適用するか、または ALT + F10キーを押します。
ユーザー インターフェイスの変更を確認するには、コードを再実行する必要があります。 たとえば、ボタンのコード ビハインドが再実行される必要があります。または、タイマーを介して一定の間隔でコードをトリガーします。 別の例として、ASP.NET Core では、MetadataUpdateHandler 機能により、ブラウザーの自動更新がサポートされています。
.NET アプリケーションのサポート
- Visual Studio 2022 を使用し、デバッガーでアプリを起動する場合、基本的なホット リロード エクスペリエンスは、ほとんどの種類の .NET アプリとフレームワーク バージョンで動作します。 このサポートには、.NET Framework、.NET Core、.NET 5 以降が含まれます (C# と Visual Basic の両方に該当します)。 このシナリオでは、デバッガーを使用している場合は、ホット リロードを使用できるものとし、ぜひ試してみてください。
- Visual Studio 2022 を使用しているが、デバッガー を使用していない場合 (たとえば、CTRL-F5 を使用してアプリを起動する場合)、ほとんどの種類の .NET 6 アプリを対象とする場合にホット リロードを使用できます。 このシナリオでは、.NET 6 以降をターゲットにしていないアプリ (つまり、.NET 5 以下をターゲットとするアプリ) は"デバッガーなし" シナリオをサポートしていないため、ホット リロードのサポートを受けるためにデバッガーを使用する必要があります。
- .NET 6 以降のアプリで Visual Studio 2022 を使用する場合、ほとんどのシナリオがサポートされます。 このサポートは、上記の新しい "デバッガーなし" 機能に限定されるわけではありません。 また、Blazor プロジェクトのホット リロードのサポートや、より一般的には、ASP.NET Core アプリでの Razor ファイルの編集、CSS ホット リロードなどの他の新機能も含まれています。 Visual Studio 2022 と .NET 6 を一緒に対象とするアプリを使用すると、最も強力なホット リロード エクスペリエンスが提供されます。
次の表は、Visual Studio 2022 (17.8) のサポートに必要な最小 .NET バージョンに基づき、デバッガーをアタッチした状態 (F5) およびデバッガーを使用しない状態 (Ctrl+F5) で .NET ホットリロードをサポートするプロジェクトを示しています。
アプリケーションの種類 | F5 | Ctrl + F5 | MetadataUpdateHandler サポート |
---|---|---|---|
コンソール | ✅ | .NET 6 | .NET 6 |
Linux/macOS での実行 (Docker と WSL) |
.NET 8 | .NET 6 | .NET 8 |
Arm64 での実行 | .NET 7 | .NET 7 | .NET 7 |
WPF | ✅ | .NET 6 | .NET 6 |
WinForms | ✅ | .NET 6 | .NET 6 |
ASP.NET | ✅ | .NET 6 | .NET 6 |
Blazor サーバー | .NET 6 | .NET 6 | .NET 6 |
Blazor WebAssembly | .NET 6 | .NET 6 | .NET 6 |
マウイ 島 (WinUI/Android/iOS) |
.NET 6 | -- | -- |
ホット リロードで できる編集の の種類は、アプリケーションの起動に使用したメソッド (F5 キーまたは Ctrl + F5 キー) ではなく、ランタイムとコンパイラのバージョンによって決まります。
以降のセクションでは、追加の詳細について説明します。
C++ アプリケーションのサポート
Visual Studio 2022 を使用し、デバッガーでアプリを起動する場合は、[ホット リロード] ボタンを使用して、デバッガー (F5) で実行しているときにネイティブ C++ アプリケーションをホット リロードできます。 ホット リロードは、CMake および OpenFolder プロジェクトを使用してビルドされたアプリでもサポートされています。
プロジェクトでホット リロードをサポートするには、次のオプションが設定されている必要があります。
- プロジェクト > プロパティ > C/C++ > 全般 >デバッグ情報形式 は、"編集および続行用のプログラム データベース
/ZI
" に設定する必要があります - プロジェクト > プロパティ > リンカー > 全般 >インクリメンタル リンクを有効にする は、"はい
/INCREMENTAL
" に設定する必要があります
サポートされている編集については、「C++ でサポートされるコード変更 」を参照してください。
Visual Studio 2022 で .NET アプリとデバッガーを使用する場合
Visual Studio 2022 を使用し、デバッガーでアプリを起動すると、ホット リロードはほとんどのアプリ フレームワークで動作します。
.NET を使用していて、Visual Studio マネージド デバッガーを使用している場合は、基本的なホット リロード のサポートを受ける必要があります。 これは、Azure Functions などのプロジェクトでもこのシナリオでうまく機能することを意味します。
手記
既定では、一部のプロジェクトでは混合モード デバッグが使用されます。このデバッグではホット リロードはサポートされていません。 プロジェクト設定でこの設定を変更するには、[プロジェクト > プロパティ] > [デバッグ] > [デバッグ起動プロファイルを開く] UI > [ネイティブ コードデバッグ を有効にする] を false に設定します。
Visual Studio 2022 と .NET アプリは使用しますが、デバッガーは使用しません
ほとんどの種類の .NET 6 以降のアプリを対象とする場合、ホット リロードはデバッガーなしで使用できます。
この機能は、.NET 6 以降専用です。 .NET 6 以降を対象としていないアプリ (つまり、.NET 5 以下をターゲットとするアプリ) は、"デバッガーなし" シナリオをサポートしていないため、デバッガーを使用してホット リロード機能にアクセスする必要があります。
また、現在、すべてのプロジェクトの種類で "デバッガーなし" シナリオがサポートされているわけではありません。.NET アプリケーションのサポートを参照してください。
Visual Studio 2022 と .NET 6 以降のアプリ
Visual Studio 2022 の両方を使用し、.NET 6 以降を対象とするアプリで作業する場合は、最も洗練された機能を備えたホット リロード エクスペリエンスの利点が得られます。
このシナリオでサポートされます。
- Blazor アプリ (サーバーおよび WebAssembly)
- Blazor と通常の ASP.NET Core Web サイトの両方で Razor ファイルを編集する
- CSS ホット リロード
- XAML ホット リロード
- デバッガーなしでアプリを実行するときのホット リロードのサポート (前述の詳細)
.NET 6 以降を対象とする場合は、今後の Visual Studio 2022 更新プログラムと .NET 機能バンドとメジャー リリースで引き続き改善が行われます。
サポートされている ASP.NET コア シナリオ
基本的なホット リロード エクスペリエンスは、多くの ASP.NET シナリオでサポートされています。 最も広く利用できる機能は、ほとんどの種類の Web アプリケーションで分離コードやその他の .NET クラス ファイルを変更できることです。 この機能は、Visual Studio デバッガーの使用中に機能し、ホット リロードが以前に使用できた場所に存在します。 より具体的なガイダンスについては、ASP.NET Core の .NET ホット リロードのサポート参照してください。
.NET 6 以降を対象とする ASP.NET Core 開発者には、.NET の下位バージョンでは使用できない追加機能があります。 これらの機能には、次のものが含まれます。
- CSHTML: Razor CSHTML ファイルを編集するときに、多くの種類の編集がサポートされます。
- ブラウザーの更新: Razor ファイルを編集すると、デバッグ時に Web ブラウザーの変更が自動的に更新されます。 この機能は、以前はデバッガーなしでアプリを起動するときにのみ使用できます。
- CSS ホット リロード: アプリの実行中に CSS ファイルを変更でき、入力すると、変更が実行中のアプリにすぐに適用されます。
- デバッガーなし: Visual Studio を使用してデバッガーなしで Web アプリを起動するときにホット リロードのサポートを受けます (CTRL-F5)。
サポートされている .NET の変更
.NET ホット リロード エクスペリエンスは、デバッガー および C# コンパイラ (Roslyn) を利用します。 Roslyn でサポートされている編集 と サポートされているコード変更 (C# と VB)、現在サポートされている編集の種類と今後の拡張機能の一覧を示します。
サポートされていない .NET プロジェクト
ホット リロードは、一部のプロジェクト構成では使用できません。
- デバッガーなしで Visual Studio を使用している場合、ホット リロードは .NET 6 以降を対象とする .NET アプリでのみ機能します。
- Visual Studio デバッガーを使用してアプリを実行しているが、設定で
Enable Hot Reload and Edit and Continue when debugging
を無効にしている場合、ホット リロードはサポートされていません。 - リリースまたはカスタム ビルド構成はサポートされていません。 プロジェクトでは、
Debug
ビルド構成を使用する必要があります。 - F# または .NET ネイティブ プロジェクトを対象としている場合。
- 一部のスタートアップまたはコンパイルの最適化は、.NET ホット リロードではサポートされていません。 たとえば、プロジェクトのデバッグ プロファイルが次の方法で構成されている場合、.NET ホット リロードはサポートされていません。
- プロジェクトに対してトリミングが有効になっている。 たとえば、デバッグ プロファイルのプロジェクト ファイルで
PublishTrimmed
が True に設定されている場合はサポートされません。 - ReadyToRun はあなたのプロジェクトで有効になっています。 たとえば、デバッグ プロファイルのプロジェクト ファイルで
PublishReadyToRun
が True に設定されている場合はサポートされません。
- プロジェクトに対してトリミングが有効になっている。 たとえば、デバッグ プロファイルのプロジェクト ファイルで
詳細については、「サポートされていないシナリオの」を参照してください。
ホット リロードを設定する
ホットリロードを有効化、無効化、または設定するには、「Edit and Continue の構成方法」を参照してください。
警告メッセージ
次のダイアログ ボックスが表示された場合、ホット リロードを再起動しないと、現在の編集を適用できません。 アプリをリビルドして変更を適用 (再起動) するか、編集を続行するかを選択できます。 リビルドすると、すべてのアプリケーションの状態が失われます。 編集を続ける場合は、追加の変更や修正によってホット リロードが再び機能する可能性があります。
ダイアログ ボックスで「変更を適用できない場合に常に再構築する」オプションを選択すると、現在の Visual Studio セッションではダイアログ ボックスが再び表示されず、自動的に再構築および再読み込みを行います。
トラブルシューティング
ホット リロード セッションに関する詳細な診断情報については、ホット リロード出力 ウィンドウを確認することを強くお勧めします。
.NET Core で応答圧縮を使用している場合は、応答圧縮 情報を参照してください。