ホット リロードは、Visual Studioのドキュメントやいくつかの従来のユーザー インターフェーステキストで、以前はエディット アンド コンティニューと呼ばれていました。
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 以降をターゲットにしていないアプリ (つまり、5 以下.NETターゲット) は "デバッガーなし" シナリオをサポートしていないため、デバッガーを使用してホット リロードサポートを受ける必要があります。
- .NET 6 以上のアプリで Visual Studio 2022 を使用する場合、ほとんどのシナリオがサポートされています。 このサポートは、前に説明した新しい "デバッガーなし" 機能に限定されるわけではありません。 また、Blazor プロジェクトのホット リロードのサポートや、より一般的には、任意の ASP.NET Core アプリでの Razor ファイルの編集、CSS ホット リロードなど、その他の新機能も含まれています。 Visual Studio 2022 と、.NET 6 を一緒に対象とするアプリを使用すると、最も強力なホット リロードエクスペリエンスが得られます。
次の表は、プロジェクトの種類に基づいて、デバッガーがアタッチされ (F5) デバッガーがアタッチされていない.NET ホット リロードをサポートするために必要な最小.NET バージョンを示しています (Ctrl + F5)。 Visual Studio 2022 バージョン 17.8 以降が必要です。
| アプリケーションの種類 | 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 Server | .NET 6 | .NET 6 | .NET 6 |
| Blazor WebAssembly(ブレイザー ウェブアセンブリ) | .NET 6 | .NET 6 | .NET 6 |
| マウイ 島 (WinUI/Android/iOS) |
.NET 6 | -- | -- |
ホット リロードで行うことができる編集の型は、アプリケーションの起動に使用したメソッド (F5 または Ctrl + F5) ではなく、ランタイムとコンパイラのバージョンによって決まります。
以降のセクションでは、追加の詳細について説明します。
.NET Framework アプリケーションのサポート
Visual Studio 2022 を使用し、デバッガーでアプリを起動する場合、基本的なホット リロード エクスペリエンスは、ほとんどの種類の.NET アプリとフレームワーク バージョンで動作します。 このサポートには、.NET Framework、.NET Core、.NET 5 以降が含まれます (該当する場合、C# とVisual Basicの両方)。 このシナリオでは、デバッガーを使用している場合は、ホット リロードが使用可能であると想定し、試してみることが期待されます。
C++ アプリケーションのサポート
Visual Studio 2022 を使用し、デバッガーでアプリを起動する場合は、ホット リロード ボタンを使用して、デバッガー (F5) で実行するときにネイティブ C++ アプリケーションをhot reloadできます。 ホット リロードは、CMake および OpenFolder プロジェクトを使用して構築されたアプリでもサポートされています。
プロジェクトでホット リロードをサポートするには、次のオプションを設定する必要があります。
- Project > プロパティ > C/C++ > General >Debug Information Format を "Program Database for Edit and Continue
/ZI" に設定する必要があります。 - Project > プロパティ > Linker > 全般 >インクリメンタルリンクの有効化 を "Yes
/INCREMENTAL" に設定する必要があります。
Visual Studio 2022 で .NET または .NET Framework アプリのデバッガーを使用する場合
Visual Studio 2022 を使用し、デバッガーでアプリを起動すると、ホット リロードはほとんどのアプリ フレームワークで動作します。
.NETがあり、Visual Studioマネージド デバッガーを使用している場合は、基本的なホット リロードサポートを受ける必要があります。 これは、Azure Functionsなどのプロジェクトでも、このシナリオでうまく機能することを意味します。
手記
既定では、一部のプロジェクトでは混合モード デバッグが使用されます。これは、ホット リロードをサポートしていません。 この設定は、project設定で変更できます。Project > プロパティ > デバッグ > デバッグ起動プロファイルを開く UI > ネイティブ コードデバッグを有効にするを false に設定します。
Visual Studio 2022 を使って .NET アプリを開発しますが、デバッガーは使用しません
ホット リロードは、ほとんどの種類の .NET 6 以上のアプリを対象とするときにデバッガーなしで使用できます。
この機能は、.NET 6 以降専用です。 .NET 6 以降をターゲットにしていないアプリ (つまり、5 以下 .NETをターゲットとするアプリ) は、"デバッガーなし" シナリオをサポートしていないため、デバッガーを使用してホット リロード機能にアクセスする必要があります。
また、現在、すべてのプロジェクトの種類で "デバッガーなし" シナリオがサポートされているわけではありません。.NET アプリケーションのSupportを参照してください。
Visual Studio 2022 と .NET 6 以上のアプリ
Visual Studio 2022 の両方を使用し、.NET 6 以降を対象とするアプリで作業する場合は、最も洗練された能力を備えたホット リロードエクスペリエンスの利点が得られます。
このシナリオでサポートされます。
- Blazor アプリ (Server と WebAssembly)
- Blazor と通常の ASP.NET Core Web サイトの両方で Razor ファイルを編集する
- CSSホットリロード(CSSファイルの変更を即座に反映する機能)
- XAML ホット リロード
- デバッガーなしでアプリを実行する場合のホット リロードのサポート (前述の詳細)
.NET 6 以降を対象とする場合は、今後の Visual Studio 2022 更新プログラムと.NET機能バンドとメジャー リリースで引き続き改善が行われます。
サポートされている ASP.NET Core シナリオ
基本的なホット リロード エクスペリエンスは、多くの ASP.NET シナリオでサポートされています。 最も広く利用できる機能は、ほとんどの種類の Web アプリケーションで分離コードやその他の.NET クラス ファイルを変更できることです。 Visual Studio デバッガーを使用しているときにこの機能は作動し、以前にホット リロードが使用可能だった場所で利用できます。 より具体的なガイダンスについては、.NET ホット リロード の ASP.NET Core 対応について参照してください。
.NET 6 以降を対象とする ASP.NET Core開発者には、.NETの下位バージョンでは使用できない追加の機能があります。 これらの機能には、次のものが含まれます。
- CSHTML: Razor CSHTML ファイルを編集するときに、多くの種類の編集がサポートされます。
- ブラウザーの更新: Razor ファイルを編集すると、デバッグ時に Web ブラウザーの変更が自動的に更新されます。 この機能は、以前はデバッガーなしでアプリを起動するときにのみ使用できます。
- CSS ホット リロード: アプリの実行中に CSS ファイルを変更でき、入力すると、変更が実行中のアプリにすぐに適用されます。
- デバッガーなし: デバッガーを使用せずに Web アプリを起動するときに Visual Studio ホット リロードサポートを受けます (CTRL-F5)。
サポートされている.NETの変更
.NET ホット リロード エクスペリエンスは、debugger および C# コンパイラ (Roslyn) を利用します。 Roslyn でサポートされている編集 と サポートされているコード変更 (C# と VB)、現在サポートされている編集の種類と今後の拡張機能の一覧を示します。
サポートされている .NET Framework の変更
.NET ホット リロード エクスペリエンスは、debugger および C# コンパイラを利用します。 サポートされているコードの変更 (C# と VB) には、 現在サポートされている編集の種類と今後の拡張機能が一覧表示されます。
サポートされていない .NET および .NET Framework プロジェクト
ホット リロードは、一部のプロジェクト構成では使用できません。
- デバッガーなしでVisual Studioを使用している場合、ホット リロードは.NET 6以上をターゲットとするアプリでのみ機能します。
- Visual Studio デバッガーを使用してアプリを実行しているが、設定で
Enable ホット リロード and Edit and Continue when debuggingを無効にしている場合、ホット リロードはサポートされていません。 - リリースまたはカスタム ビルド構成はサポートされていません。 プロジェクトでは、
Debugビルド構成を使用する必要があります。 - F# プロジェクトまたは .NET ネイティブ プロジェクトを対象とする場合。
- 一部のスタートアップまたはコンパイルの最適化は、.NET ホット リロードではサポートされていません。 たとえば、プロジェクトのデバッグ プロファイルが次の方法で構成されている場合、.NET ホット リロードはサポートされません。
-
プロジェクトに対してトリミングが有効になっている。 たとえば、デバッグ プロファイルのプロジェクト ファイルで
PublishTrimmedが True に設定されている場合はサポートされません。 -
ReadyToRun はあなたのプロジェクトで有効になっています。 たとえば、デバッグ プロファイルのプロジェクト ファイルで
PublishReadyToRunが True に設定されている場合はサポートされません。
-
プロジェクトに対してトリミングが有効になっている。 たとえば、デバッグ プロファイルのプロジェクト ファイルで
詳細については、「サポートされていないシナリオの」を参照してください。
ホット リロード F ではサポートされていません#
F# コードをデバッグする場合には、ホット リロード(編集と継続)はサポートされません。 F# コードの編集はデバッグ セッション中に可能ですが、避ける必要があります。 コードの変更は、デバッグ セッション中には適用されません。 そのため、デバッグ中に F# コードを編集すると、デバッグ対象のコードと一致しないソース コードが生成されます。
ホット リロードの構成
ホット リロードを有効、無効、または構成するには、編集の継続を設定を参照してください。
警告メッセージ
次のダイアログ ボックスが表示された場合、ホット リロードは再起動せずに現在の編集を適用できません。 アプリをリビルドして変更を適用 (再起動) するか、編集を続行するかを選択できます。 リビルドすると、すべてのアプリケーションの状態が失われます。 編集を続ける場合は、追加の変更や修正によってホット リロードが再び機能する可能性があります。
ダイアログ ボックスで 変更を適用できない場合は常に再構築 オプションを選択すると、現在の Visual Studio セッション中にダイアログ ボックスは再び表示されず、Visual Studio はダイアログ ボックスを表示する代わりに自動的に再構築と再読み込みを行います。
トラブルシューティング
ホット リロードが期待どおりに動作しない場合は、次の項目を確認してください。
- サポートされているアプリとシナリオを実行していることを確認します。 プロジェクトの種類、混合モードデバッグ、最適化されたコード、プロセスへのアタッチシナリオでは、ホット リロードがサポートされていません。 詳細については、「 サポートされていないシナリオ」を参照してください。
- アプリが
Debug構成を使用していて、ホット リロードが Tools>Options で有効になっていることを確認します >Debugging>.NET/C++ ホット リロード。 - Logging Verbosity を Detailed または Diagnostic に設定して、ホット リロード 出力の詳細情報を取得します。
- 出力ウィンドウを開き、show output from で ホット リロード を選択して診断メッセージを確認します。
- デバッグ中に行が読み取り専用で表示される場合は、呼び出し履歴のアクティブなステートメントであるか、編集に再起動が必要な場合があります。
一般的な診断の一覧については、「ホット リロードと編集のエディットと継続のエラーメッセージ」をご参照ください。 問題が解決せず、出力に明確な原因が示されない場合は、問題の報告を使用して、Visual Studio チームにフィードバックを送信します。
.NET Core で応答圧縮を使用している場合は、response 圧縮に関する情報を参照してください。