Visual Studio でホット リロードを使って実行中のコードの記述とデバッグを行う (C#、Visual Basic、C++)

Visual Studio 2022 から、Visual Studio のホット リロード エクスペリエンスがマネージド .NET とネイティブ C++ アプリの両方で機能するようになります。 作業しているアプリの種類にかかわらず、ホット リロードの目的は、編集の間のアプリの再起動をできるだけ減らし、アプリのリビルド、再起動、アプリ内の前にいた場所への再移動などにかかる時間を短縮して、生産性を向上させることです。

アプリケーションのコード ファイルを編集し、そのコード変更を実行中のアプリケーションに対して直ちに適用できるようにすることで、これを実現します ("ホット リロード" とも呼ばれます)。 変更が適用されたら、アプリ自体のアクションを実行して (または何らかのタイマーなどを使って) コードを再実行し、すぐに変更内容を確認できます。ブレークポイントによるアプリの一時停止は必要ありません。

ホット リロードを使って実行中のコードを更新する

  1. サポートされているアプリケーションの種類に基づいてプロジェクトを開きます。 .NETC++ でサポートされるアプリケーションを参照してください。

  2. F5 キーを使うか、サポートされている場合Ctrl + F5 キーを使って、デバッガーをアタッチしてアプリを起動します。

  3. コード ファイルを開き、コードを変更します。

  4. [ホット リロード] ボタンを使うか Alt + F10 キーを押して、コードの変更を適用します。

    Screenshot of the Hot Reload button.

ユーザー インターフェイスの変更を確認するには、コードを再実行する必要があります。 たとえば、ボタンのコード ビハインドは再実行するか、タイマーを介してサイクル間隔でトリガーされるコードを実行する必要があります。 別の例として、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 以下をターゲットとする) アプリでは "デバッガーなし" のシナリオはサポートされません。そのような場合、ホット リロードのサポートを得るにはデバッガーを使う必要があります。
  • Visual Studio 2022 と .NET 6 アプリを使う場合、最も多くのシナリオがサポートされます。 上記で説明した新しい "デバッガーなし" の機能だけではありません。 他の新機能も含まれています。たとえば、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
MAUI
(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 などのプロジェクトもこのシナリオでうまく機能することを意味します。

Note

一部のプロジェクトでは、既定でホット リロードをサポートしていない混合モード デバッグが使用されています。 これをプロジェクト設定で変更するには、[プロジェクト] > [プロパティ] > [デバッグ] > [オープン デバッグ起動プロファイル 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 Core のシナリオ

多くの 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 に設定されている場合はサポートされません。

詳細については、「サポートされていないシナリオ」を参照してください。

ホット リロードの構成

ホット リロードを有効、無効、または構成するには、エディット コンティニュの構成に関するページを参照してください。

警告メッセージ

次のダイアログ ボックスが表示された場合、ホット リロードでは再起動せずに現在の編集内容を適用することができません。 アプリをリビルドして変更を適用する (再起動) か、編集を続行するかを選べます。 リビルドすると、すべてのアプリケーション状態が失われます。 編集を続行する場合は、追加の変更や修正によってホット リロードが再び動作する可能性があります。

Screenshot of the apply changes dialog box

ダイアログ ボックスで「変更を適用できない場合は常にリビルドする」オプションを選ぶと、現在の Visual Studio セッションではダイアログ ボックスは再度表示されなくなり、Visual Studio によってダイアログ ボックスを表示する代わりに自動的にリビルドと再読み込みが行われます。

トラブルシューティング

ホット リロード セッションに関する詳細な診断情報については、[ホット リロード出力] ウィンドウを確認することを強くお勧めします。

.NET Core で応答圧縮を使用している場合は、応答圧縮に関する情報を参照してください。