サポートされているコードの変更 (C# と Visual Basic)
ホット リロード メカニズムは、以前はエディット コンティニュと呼ばれ、メソッド本体内のほとんどの種類のコード変更を処理します。 ただし、ほとんどの変更はメソッド本体の外部で行われ、メソッド本体内のいくつかの変更はデバッグ中に適用できません。 サポートされていない変更を適用するには、デバッグを停止し、新しいバージョンのコードで再起動する必要があります。
エディット コンティニュ メカニズムは、メソッド本体内のほとんどの種類のコード変更を処理します。 ただし、ほとんどの変更はメソッド本体の外部で行われ、メソッド本体内のいくつかの変更はデバッグ中に適用できません。 サポートされていない変更を適用するには、デバッグを停止し、新しいバージョンのコードで再起動する必要があります。
コードに対するサポートされている変更
次の表は、セッションを再起動せずにデバッグ セッション中に C# および Visual Basic コードに加えられる可能性のある変更を示しています。
言語要素または機能 | サポートされている編集操作 | 制限 |
---|---|---|
種類 | メソッド、フィールド、コンストラクターなどを追加する | はい |
反復子 | 追加または変更 | いいえ |
非同期/待機式 | 追加または変更 | はい |
動的オブジェクト | 追加または変更 | いいえ |
ラムダ式 | 追加または変更 | はい |
LINQ 式 | 追加または変更 | ラムダ式と同じ |
ジェネリック | 追加または変更 | はい |
言語要素または機能 | サポートされている編集操作 | 制限 |
---|---|---|
種類 | メソッド、フィールド、コンストラクターなどを追加する | はい |
反復子 | 追加または変更 | いいえ |
非同期/待機式 | 追加または変更 | はい |
動的オブジェクト | 追加または変更 | いいえ |
ラムダ式 | 追加または変更 | はい |
LINQ 式 | 追加または変更 | ラムダ式と同じ |
手記
文字列補間や null 条件演算子などの新しい言語機能は、通常、エディット コンティニュでサポートされています。 最新の情報については、EnC でサポートされている編集に関するページを参照してください。
.NET 6 以降の機能強化
.NET 6 以降および Visual Studio 2022 以降のバージョンの機能強化には、以前のバージョンの Visual Studio で最初に可能だった機能を超える種類の編集のサポートが含まれます。 これらの機能強化は、ホット リロードとエディット コンティニュエクスペリエンスの両方で利用できます。
.NET 6 以降のホット リロード機能は、編集と継続 メカニズムと Roslyn を利用しています。 サポートされている編集 には、Roslyn で現在サポートされている編集の種類と、今後の拡張機能が一覧表示されます。
コードに対するサポートされていない変更
次の変更は、デバッグ セッション中に C# および Visual Basic コードに適用できません。
現在のステートメントまたはその他のアクティブなステートメントに対する変更。
アクティブなステートメントは、現在のステートメントにアクセスするために呼び出された呼び出し履歴上の関数内の任意のステートメントです。
現在のステートメントは、ソース ウィンドウの黄色の背景に表示されます。 その他のアクティブなステートメントは、網掛けされた背景に表示され、読み取り専用です。 これらの既定の色は、[オプション] ダイアログ ボックスで変更できます。
次の表に示すように、言語要素別のコードに対するサポートされていない変更。
言語要素または機能 サポートされていない編集操作 すべてのコード要素 名前の変更 名前空間 追加する 名前空間、型、メンバー 削除 インターフェイス 変更 種類 抽象メンバーまたは仮想メンバーの追加、オーバーライドの追加 (の詳細を参照) 種類 デストラクターを追加する メンバー - 埋め込み相互運用機能型を参照するメンバーを変更する
- コードを実行して既にアクセスした後に静的メンバーを変更するメンバー (Visual Basic) - On Error ステートメントまたは Resume ステートメントでメンバーを変更する
- 集計、グループ化、単純結合、またはグループ結合 LINQ クエリ句を含むメンバーを変更するメソッド - 署名を変更する
- メソッド本体を追加して抽象メソッドを非abstract にする
- メソッド本体を削除する属性 追加または変更 イベントまたはプロパティ 型パラメーター、基本型、デリゲート型、または戻り値の型を変更する 演算子またはインデクサー 型パラメーター、基本型、デリゲート型、または戻り値の型を変更する catch ブロック アクティブなステートメントが含まれている場合に変更する try-catch-finally ブロック アクティブなステートメントが含まれている場合に変更する using ステートメント 追加 非同期メソッド/ラムダ式 .NET Framework 4 以前をターゲットとするプロジェクトの非同期メソッド/ラムダを変更する (詳細参照) 反復子 .NET Framework 4 以前をターゲットとするプロジェクト内の反復子を変更する (の詳細を参照) 言語要素または機能 サポートされていない編集操作 すべてのコード要素 名前の変更 名前空間 追加 名前空間、型、メンバー 削除 ジェネリック 追加または変更 インターフェイス 変更 種類 抽象メンバーまたは仮想メンバーの追加、オーバーライドの追加 (の詳細を参照) 種類 デストラクターを追加する メンバー - 埋め込み相互運用機能型を参照するメンバーを変更する
- コードを実行して既にアクセスした後に静的メンバーを変更するメンバー (Visual Basic) - On Error ステートメントまたは Resume ステートメントでメンバーを変更する
- 集計、グループ化、単純結合、またはグループ結合 LINQ クエリ句を含むメンバーを変更するメソッド - 署名を変更する
- メソッド本体を追加して抽象メソッドを非abstract にする
- メソッド本体を削除する属性 追加または変更 イベントまたはプロパティ 型パラメーター、基本型、デリゲート型、または戻り値の型を変更する 演算子またはインデクサー 型パラメーター、基本型、デリゲート型、または戻り値の型を変更する catch ブロック アクティブなステートメントが含まれている場合に変更する try-catch-finally ブロック アクティブなステートメントが含まれている場合に変更する using ステートメント 追加 非同期メソッド/ラムダ式 (async methods/lambdas) .NET Framework 4 以前をターゲットとするプロジェクトの非同期メソッド/ラムダを変更する (詳細参照) 反復子 .NET Framework 4 以前をターゲットとするプロジェクト内の反復子を変更する (の詳細を参照)
安全でないコード
安全でないコードに対する変更には、安全なコードに対する変更と同じ制限があります。エディット コンティニュでは、stackalloc
演算子を含むメソッド内で終了する安全でないコードに対する変更はサポートされません。
アプリケーションのサポート
サポートされているアプリケーションは次のとおりです。
- Windows 10 または Windows 11 の UWP アプリ
- .NET Framework 4.6 デスクトップ以降のバージョンを対象とする x86 および x64 アプリ (.NET Framework はデスクトップ バージョンのみ)
.NET 6 以降では、次のファイルの種類の編集がサポートされています。
- .cshtml
- .razor
サポートされていないアプリ、プラットフォーム、および操作
サポートされていないアプリケーションまたはプラットフォームは次のとおりです。
- F#
- .NET Native
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS および Android)
ASP.NET および ASP.NET Core では、次のファイルの種類の編集はサポートされていません。
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
サポートされていないシナリオ
エディット コンティニュは、次のデバッグ シナリオでは使用できません。
混合モード (ネイティブ/マネージド) デバッグ。
.NET 7 以降を対象とせずに Arm64 でデバッグする。
COR_ENABLE_PROFILING 環境変数を使用してデバッグ。
[デバッグ] メニューから [開始] を選んでアプリケーションを実行する代わりに、プロセスへのアタッチ ([デバッグ] > [プロセスにアタッチ]) を使用してアプリケーションをデバッグします。 プロセスにアタッチするときにエディット コンティニュを使用する場合は、プロセス (
set COMPLUS_ForceENC=1
) を起動する前に、COMPLUS_ForceENC 環境変数を設定する必要があります。非決定的 (時間ベースなど) のアセンブリ バージョンを使用したデバッグ。 エディット コンティニュを使用する場合は、リリース (または CI) ビルドでのみバージョンを設定し、デバッグ ビルドのバージョンを一定に保つことを検討してください。
最適化されたコードのデバッグ。
SQL デバッグ。
ダンプ ファイルのデバッグ。
埋め込みランタイム アプリケーションのデバッグ。
新しいバージョンがビルド エラーのためにビルドできなかったため、古いバージョンのコードをデバッグすることになりました。