2022LogoVisual Studio 2022 バージョン 17.0 リリース ノート


ヒント

Visual Studio 2022 のローンチ イベントの録画を視聴して、新機能について学習し、ヒントやテクニックを確認して、無料のデジタル Swag をダウンロードしてください。

Developer Community | Visual Studio 2022 ロードマップ | システム要件 | 互換性 | 再頒布可能コード | リリース履歴 | ライセンス条項 | ブログ | 最新リリースの既知の問題 | Visual Studio のドキュメントの最新情報


Visual Studio 2022 バージョン 17.0

Visual Studio 2022 バージョン 17.0 のサポートは 2023 年 7 月に終了しました。つまり、このバージョンのセキュリティ更新プログラムは今後提供されません。 Visual Studio 2022 17.0 LTSC チャネルを使用している Enterprise および Professional サブスクライバーは、最新の Current チャネルまたは LTSC リリースを使用する必要があります。

Visual Studio 2022 のリリースとサポート日についてご覧ください。

Visual Studio 製品のライフサイクルとサービスについて説明します。

Visual Studio のサイトに移動して、Visual Studio 2022 製品の最新バージョンのリンクにアクセスしてください。 Visual Studio 2022 のインストールと更新の手順については、Visual Studio 2022 の最新リリースへの更新に関するページを参照してください。 Visual Studio 管理者ガイドには、組織全体に Visual Studio を展開する方法についてのガイダンスが含まれています。

Visual Studio 2022 バージョン 17.0 リリース

Visual Studio 2022 ブログ

Visual Studio 2022 ブログは、Visual Studio エンジニアリング チームから製品に関する分析情報を提供する公式の情報源です。 Visual Studio 2022 リリースの詳細については、次の投稿を参照してください。


17.0.23 Visual Studio 2022 バージョン 17.0.23

リリース日: 2023 年 7 月 11 日

17.0.23 のこのリリースで対処された問題

  • Microsoft では、SmtpClient クラスで SMTP アドレスの挿入が発生する可能性がある脆弱性を認識しています。 これは CVE-2022-26893 に相当します (脆弱性の評価が中であるため、公開されている CVE ではありません)。

対処済みのセキュリティ アドバイザリ


17.0.22 Visual Studio 2022 バージョン 17.0.22

"リリース日: 2023 年 6 月 13 日"

この 17.0.22 リリースで対処された問題

  • Microsoft では、SmtpClient クラスで SMTP アドレスの挿入が発生する可能性がある脆弱性を認識しています。 これは CVE-2022-26893 に相当します (脆弱性の評価が中であるため、公開されている CVE ではありません)。

対処済みのセキュリティ アドバイザリ


17.0.21 Visual Studio 2022 バージョン 17.0.21

リリース日: 2023 年 4 月 11 日

17.0.21 のこのリリースで対処された問題

  • カーネル モード ドライバーの PGO トレーニング中に使用されるドライバーに無効な入力が送信されたときのクラッシュを修正。
  • テレメトリ データの更新時にクラッシュが発生する可能性がある IIS Express の問題を修正しました。
  • Microsoft では、SmtpClient クラスで SMTP アドレスの挿入が発生する可能性がある脆弱性を認識しています。 これは CVE-2022-26893 に相当します (脆弱性の評価が中であるため、公開されている CVE ではありません)。

開発者コミュニティ

対処済みのセキュリティ アドバイザリ


17.0.20 Visual Studio 2022 バージョン 17.0.20

リリース日: 2023 年 3 月 14 日

17.0.20 のこのリリースで対処された問題

  • Microsoft では、SmtpClient クラスで SMTP アドレスの挿入が発生する可能性がある脆弱性を認識しています。 これは CVE-2022-26893 に相当します (脆弱性の評価が中であるため、公開されている CVE ではありません)。
  • Git 2.39 では、credential.helper の値の名前が "manager-core" から "manager" に変更されました。 詳細については、「 https://aka.ms/gcm/rename 」を参照してください。
  • CVE-2023-22490 に対処する、mingit と Git for Windows パッケージの v2.39.2 への更新

対処済みのセキュリティ アドバイザリ


17.0.19 Visual Studio 2022 バージョン 17.0.19

リリース日: 2023 年 2 月 14 日

17.0.19 のこのリリースで対処された問題

  • CPython インタープリターをバージョン 3.9.13 に更新しました。
  • mingit と Git for Windows パッケージの v2.39.1.1 への更新。これは CVE-2022-41903 に対処しています

対処済みのセキュリティ アドバイザリ

17.0.18 Visual Studio 2022 バージョン 17.0.18

リリース日: 2023 年 1 月 10 日

対処済みのセキュリティ アドバイザリ

  • CVE-2023-21538 .NET サービス拒否の脆弱性 .NET 6.0 にはサービス拒否の脆弱性が存在します。この脆弱性により、悪意のあるクライアントによってスタック オーバーフローが発生し、攻撃者が公開されたエンドポイントに無効な要求を送信すると、サービス拒否攻撃が発生する可能性があります。

17.0.17 Visual Studio 2022 バージョン 17.0.17

リリース日: 2022 年 12 月 13 日

対処済みのセキュリティ アドバイザリ

  • CVE-2022-41089 リモート コード実行 .NET Core 3.1、.NET 6.0、.NET 7.0 にリモート コード実行の脆弱性が存在します。悪意を持って作成された xps ファイルを解析した結果、悪意のあるアクターがユーザーに任意のコードを実行させるおそれがあります。

17.0.16 Visual Studio 2022 バージョン 17.0.16

リリース日: 2022 年 11 月 8 日

17.0.16 のこのリリースで対処された問題

対処済みのセキュリティ アドバイザリ


17.0.15 Visual Studio 2022 バージョン 17.0.15

"リリース日: 2022 年 10 月 11 日"

この 17.0.15 のリリースで対処された問題

  • 管理者は、VS を更新せずにレイアウトからオフラインのクライアント マシンの VS インストーラーを更新できるようになります。

対処済みのセキュリティ アドバイザリ

  • CVE-2022-41032 .NET 特権の昇格の脆弱性 .NET 7.0.0-rc.1、.NET 6.0、.NET Core 3.1、および NuGet クライアント (NuGet.exe、NuGet.Commands、NuGet.CommandLine、NuGet.Protocol) には、悪意のあるアクターがユーザーによる任意のコードの実行を引き起こすことができるおそれのある脆弱性が存在します。

17.0.14 Visual Studio 2022 バージョン 17.0.14

"リリース日: 2022 年 9 月 13 日"

この 17.0.14 のリリースで対処された問題

対処済みのセキュリティ アドバイザリ

CVE-2022-38013 .NET サービス拒否の脆弱性 ASP.NET Core 3.1 および .NET 6.0 にはサービス拒否の脆弱性が存在します。この脆弱性により、悪意のあるクライアントによってスタック オーバーフローが発生し、モデル バインド中に解析されるカスタマイズされたペイロードを攻撃者が送信すると、サービス拒否攻撃が発生する可能性があります。


17.0.13 Visual Studio 2022 バージョン 17.0.13

"リリース日: 2022 年 8 月 9 日"

この 17.0.13 のリリースで対処された問題

  • 17.1.4 更新後の Git エラーに対応 - Visual Studio フィードバックで、Visual Studio を使って git リポジトリを安全としてマークするオプションが提供されます。
  • MinGit をバージョン 2.37.1.1 に更新し、CVE - CVE-2022-29187 (mitre.org) に対応 (自分が所有していても他のユーザーが書き込めるリポジトリに移動すると、悪意のあるコードの実行に悪用されるおそれがある脆弱性にユーザーが晒されました)。
  • Git for Windows を v2.37.1.1 に更新し、CVE-2022-31012 に対応。

対処済みのセキュリティ アドバイザリ


17.0.12 Visual Studio 2022 バージョン 17.0.12

"リリース日: 2022 年 7 月 12 日"

この 17.0.12 のリリースで対処された問題

  • cdnjs API の変更に対応するように LibraryManager を更新しました
  • ドキュメントを開く際にテキスト エディターが空白になる、または入力中にクラッシュするバグを修正しました。

対処済みのセキュリティ アドバイザリ

  • CVE-2022-24513 特権の昇格の脆弱性Microsoft Visual Studio アップデータ サービスがローカル構成データを不適切に解析すると、特権の昇格の脆弱性が発生するおそれがあります。

17.0.11 Visual Studio 2022 バージョン 17.0.11

"リリース日: 2022 年 6 月 14 日"

この 17.0.11 のリリースで対処された問題

  • サイド バイ サイド Dev 16.11 C++ ツールセットをバージョン 14.29.30145.00 に更新しました。 最新バージョンの Dev 16.11 C++ ツールセットには、残っているすべての C++ 20 不具合報告の修正を含む、重要なバグ修正が含まれています。 詳細については、16.11.14 のリリース ノートを参照してください。

Developer Community から

対処済みのセキュリティ アドバイザリ


17.0.10 Visual Studio 2022 バージョン 17.0.10

"リリース日: 2022 年 5 月 10 日"

17.0.10 のこのリリースで対処された問題

  • Visual Studio およびインストール可能なオプション コンポーネントによって使用される Git for Windows のバージョンを 2.36.0.1 に更新しました
  • git 統合に関して、分岐しているブランチをプルまたは同期するとき、出力ウィンドウにその解決方法に関するローカライズされたヒントが表示されない問題を修正しました。
  • Visual Studio で Git リポジトリを開いたときに、出力ウィンドウにエラーが発生した理由やその対処方法ではなく、"1 つ以上のエラーが発生しました。" と表示される問題を修正しました。
  • Daytona の webview2 ベースラインを更新しました

Developer Community から

対処済みのセキュリティ アドバイザリ

[CVE-2022-29117 .NET サービス拒否の脆弱性 .NET 6.0、.NET 5.0、.NET Core 3.1 には、悪意のあるクライアントが Cookie を操作し、サービス拒否を引き起こすことができる脆弱性が存在します。

CVE-2022-23267 .NET Core サービス拒否の脆弱性 .NET 6.0、.NET 5.0、.NET Core 3.1 には、悪意のあるクライアントが、HttpClient を使用した過剰なメモリ割り当てによってサービス拒否を引き起こすことができる脆弱性が存在します。

CVE-2022-29145 .NET サービス拒否の脆弱性 .NET 6.0、.NET 5.0、.NET Core 3.1 には、悪意のあるクライアントが、HTML フォームの解析時にサービス拒否を引き起こすことができる脆弱性が存在します。

CVE-2022-24513 特権の昇格の脆弱性Microsoft Visual Studio アップデータ サービスがローカル構成データを不適切に解析すると、特権の昇格の脆弱性が発生するおそれがあります。


17.0.9 Visual Studio 2022 バージョン 17.0.9

リリース日: 2022 年 4 月 19 日

17.0.9 のこのリリースで対処されたイシュー

  • 17.0.8 からの vctip.exe の回帰を修正しました。
  • Windows 11 で Address Sanitizer (ASAN) を使って構築された一部のアプリケーションを読み込むことができないバグを修正しました。
  • ヒープ競合のあるマルチスレッド アプリケーションで、デッドロック、誤った "ワイルド ポインター解放" レポート、またはプロセス終了時のデッドロックが発生する可能性があるという、別の ASAN の問題を修正しました。
  • 'オフライン マシンに Visual Studio 用の任意の拡張機能 (vsix) をインストールできない' 問題を修正しました。

17.0.8 Visual Studio 2022 バージョン 17.0.8

リリース日 2022 年 4 月 12 日

17.0.8 のこのリリースで対処されたイシュー

  • テスト実行の一部のアニメーションが、関連するテスト実行が完了してもバックグラウンドで実行される問題を修正しました。 これによって発生する減速は、高リフレッシュ レートのモニターで特に顕著でした。 この修正により、リフレッシュ レートの高いモニターで VS を使用するエクスペリエンスが向上します。
  • TFVC を長期間 (1 時間以上) 使用すると Visual Studio がハングまたはフリーズする問題を解決しました。
  • インストーラーのコマンド ラインを追加して、未使用のチャネルを削除しました。

Developer Community から

対処済みのセキュリティ アドバイザリ

CVE-2022-24765 特権の昇格の脆弱性Windows の Git には特権の昇格の脆弱性が存在するおそれがあります。これにより、Git ディレクトリを検索中に Git 操作がリポジトリの外部で実行される場合があります。 Windows の Git はバージョン 2.35.2.1 にアップデートされました。

CVE-2022-24767 DLL 乗っ取りの脆弱性 SYSTEM ユーザー アカウントでアンインストーラーを実行すると、Windows インストーラーの Git に DLL が乗っ取られる脆弱性が存在するおそれがあります。 Windows の Git はバージョン 2.35.2.1 にアップデートされました。

CVE-2022-24513 特権の昇格の脆弱性Microsoft Visual Studio アップデータ サービスがローカル構成データを不適切に解析すると、特権の昇格の脆弱性が発生するおそれがあります。


17.0.7 Visual Studio 2022 バージョン 17.0.7

"リリース日: 2022 年 3 月 8 日"

17.0.7 のこのリリースで対処された問題

  • 高リフレッシュ レート モニターのパフォーマンスが向上しました。
  • Community SKU ユーザーの Visual Studio 起動時のハングを修正しました。

Developer Community から

Developer Community には、17.0 で利用可能な修正プログラムの完全な一覧があります。

対処済みのセキュリティ アドバイザリ

CVE-2020-8927 の脆弱性 .NET 5.0 および .NET Core 3.1 にリモート コード実行の脆弱性が存在し、1.0.8 より前のバージョンの Brotli ライブラリにバッファー オーバーフローが存在します。

CVE-2022-24464 の脆弱性 特定の種類の http フォーム要求を解析するときに、.NET 6.0、.NET 5.0、および .NET CORE 3.1 にサービス拒否の脆弱性が存在します。

CVE-2022-24512 の脆弱性 .NET Double Parse ルーチンでスタック バッファー オーバーランが発生する .NET 6.0、.NET 5.0、および .NET Core 3.1 にリモート コード実行の脆弱性が存在します。

CVE-2021-3711 OpenSSL バッファー オーバーフローの脆弱性 Git for Windows で使用される OpenSSL には、バッファー オーバーフローの潜在的な脆弱性が存在します。 Git for Windows がバージョン 2.35.1.2 に更新され、この問題が対処されています。


17.0.6 Visual Studio 2022 バージョン 17.0.6

リリース日: 2022 年 2 月 8 日

17.0.6 のこのリリースで対処されたイシュー

対処済みのセキュリティ アドバイザリ

CVE-2022-21986 の脆弱性 .NET 5.0 および .NET 6.0 には、Kestrel Web サーバーが特定の HTTP/2 および HTTP/3 要求を処理するとき、サービス拒否される脆弱性があります


17.0.5 Visual Studio 2022 バージョン 17.0.5

リリース日: 2022 年 1 月 13 日

17.0.5 のこのリリースで対処されたイシュー

  • 揮発性メタデータを使用してバイナリをインストルメント化するときに VSInstr が終了せずに、インストルメンテーション プロファイルが失敗する場合があるインスタンスに対処しました。
  • バイナリと共に PDB を生成するときに、link.exe がときどきクラッシュまたはハングする問題を修正しました。
  • 整数オーバーフローのために呼び出しプロセスがクラッシュしていた C++ Concurrency::parallel_for_each のバグを修正しました。
  • C++20 および C++Latest の言語モードでの ATL の CString 比較のバグを修正しました。
  • 多数の pogo プローブが使用された場合に、arm64 と arm64ec で PGI バイナリを実行したときのクラッシュを修正しました。
  • 非常に大きな関数を最適化すると、正しくないコードが生成されるイシューを修正しました。

17.0.4 Visual Studio 2022 バージョン 17.0.4

リリース日: 2021 年 12 月 16 日

17.0.4 のこのリリースで対処されたイシュー

  • Xcode 13.2 のサポートが追加されました。

17.0.3 Visual Studio 2022 バージョン 17.0.3

リリース日: 2021 年 12 月 14 日

17.0.3 のこのリリースで対処されたイシュー

双方向テキスト制御文字のレンダリング

悪意がある可能性のある悪用によってコードが誤って表示されるのを防ぐために、Visual Studio エディターでは、双方向テキスト制御文字で編集画面上の文字の順序を操作できなくなりました。 新しいオプションを使用すると、これらの双方向テキスト制御文字がプレースホルダーと共に表示されます。 この動作はコード エディターにレンダリングされる内容にのみ影響するため、双方向テキスト制御文字は引き続きコード内に存在します。

VS with bidirectional text control characters replaced with placeholders

この機能は、[ツール]、[オプション] で制御します。 [テキスト エディター] の [全般] ページでは、[Show bidirectional text control characters](双方向テキスト制御文字の表示) オプションが既定でオンになっています。 オンにすると、すべての双方向テキスト制御文字がプレースホルダーとしてレンダリングされます。 このオプションをオフにすると、これらの文字がレンダリングされていない、前の動作に戻ります。

Unicode 文字は、次の範囲のいずれかに該当する場合、双方向テキスト制御文字と見なされます: U+061c、U+200e-U+200f、U+202a-U+202e、U+2066-U+2069。

  • Web Forms デザイナーのクラッシュを修正しました
  • !important の CSS 補完によって、HTML または Razor ファイル内の間違った場所にテキストが挿入されるイシューを修正しました。
  • SignalR など、類似した依存関係を共有するライブラリと競合する、Xamarin.Forms XAML ホット リロードによる回帰を修正しました。 アプリケーションに読み込まれる内容に関係なく、Xamarin.Forms XAML ホット リロードが相互運用できるようになりました。
  • プロジェクトの概要ページ、診断ツールまたはパフォーマンス プロファイラーのウィンドウが時々空白になるイシューを修正しました。
  • カーソルが入力途中で別の場所に移動する、Razor ファイル編集のイシューを修正しました。

Developer Community から

Developer Community には、17.0 で利用可能な修正プログラムの完全な一覧があります。

対処済みのセキュリティ アドバイザリ

CVE-2021-43877 .NET の脆弱性 特権の昇格の脆弱性が ANCM に存在し、これによって .NET core、.NET 5、.NET 6 のアプリケーションが IIS 内でホストされている場合に特権の昇格が許可される場合があります。

CVE-2021-42574 双方向テキストの脆弱性 双方向テキスト制御文字を使用すると、エディターでのコードのレンダリングを、ディスクに含まれるものとは異なる方法で行うことができます。


17.0.2 Visual Studio 2022 バージョン 17.0.2

リリース日: 2021 年 11 月 30 日

17.0.2 のこのリリースで対処された問題

  • 重複するデータを含む memmove のような操作でのサイレントかつ不適切な codegen の修正
  • C++ モジュールまたはヘッダー ユニットを使用する際に表示される出力ウィンドウでのメッセージングが追加されました。 これには、IntelliSense でのモジュールまたはヘッダー ユニットの使用に関する現在の既知の問題が含まれています。
  • CMake の概要ページおよび CMakeSettings エディターが "Waiting for IntelliSense to finish initializing..." と表示したままスタックする問題の修正
  • データ メンバー初期化子を持つクラス階層に含まれるテンプレート化されたデストラクターが、早くに初期化され過ぎて、未定義の型の使用や他のエラーに関する診断が正しく行われない可能性がある問題を修正しました。
  • Python 3.9.7 を Python ワークロードに追加しました。 セキュリティの脆弱性のため、Python 3.7.8 が削除されました。
  • "次を検索" (F3 キー) と [次の選択項目を検索] (Ctrl + F3 キー) で、次の出現箇所ではなくファイル内の最初の出現箇所にジャンプする場合がある問題を修正しました。
  • バージョン コントロール ユーザー インターフェイスの日付で、顧客のオペレーティング システム ロケールが尊重されない問題を解決します。
  • Windows 11 で、Windows ターミナルが既定として設定されると、デバッガーでコンソール アプリのデバッグを適切に停止して、その後にデバッグが開始されないようにすることができない問題に対処します。

Developer Community から

Developer Community には、17.0 で利用可能な修正プログラムの完全な一覧があります。


17.0.1 Visual Studio 2022 バージョン 17.0.1

リリース日: 2021 年 11 月 16 日

17.0.1 のこのリリースで対処された問題

  • バッチ ビルドを使用する場合のクラッシュを修正しました。
  • XAML ホット リロードを有効にして Xamarin.Forms プロジェクトを起動する場合のクラッシュを修正しました。

Developer Community から

Developer Community には、17.0 で利用可能な修正プログラムの完全な一覧があります。

17.0.0 Visual Studio 2022 バージョン 17.0.0

リリース日: 2021 年 11 月 8 日

Visual Studio 2022 バージョン 17.0.0 のこのリリースの新機能の概要

64 ビット

  • devenv.exe は、64 ビットのみになりました

Azure Cloud Services

  • 新しい Azure クラウドサービス (クラシック) プロジェクトは、新しい顧客のために Azure で非推奨とされているため、サポートされていません。 Azure クラウド サービス (延長サポート) プロジェクトが代わりに推奨されます。
  • 既存の Azure クラウドサービス (クラシック) プロジェクトを開いて、完全なサポートを受けることができます。

C++

  • v143 のビルド ツールを、Visual Studio のインストーラーだけでなく スタンドアロンのビルド ツール からも使用できるようになりました。
  • ネイティブ C++ アプリケーションをデバッガーを有効にして実行しているときに、新しいホット リロード エクスペリエンスを使用できるようになりました。 これは、MSBuild プロジェクトと CMake プロジェクトの両方をサポートします。 詳細については、後述する「ホット リロード」セクションを参照してください。
  • SSH 接続を確立することなく、WSL2 でネイティブにビルドとデバッグができるようになりました。 クロスプラットフォームの CMake プロジェクトと MSBuild ベースの Linux プロジェクトの両方がサポートされます。
  • Visual Studio は、CMakePresets.json の buildPresets.targets オプションをサポートするようになりました。 これにより、CMake プロジェクトでターゲットのサブセットをビルドすることができます。
  • CMake プロジェクトの [プロジェクト] メニューが整理され、[Delete Cache and Reconfigure](キャッシュを削除して再構成) と [キャッシュの表示] のオプションが公開されました。
  • CMakePresets.json をサポートするように、CMake の [概要] ページが更新されています。
  • P1689r4 で説明されている CMake プロジェクトの C++20 モジュールの依存関係を出力する /scanDependencies フラグを実装しました。 これは、CMake を使用してモジュールベースのプロジェクトをビルドするためのサポートに向けた一歩であり、今後のリリースでの完全なサポートに向けて取り組んでいます。
  • LLDB を使用して、Visual Studio からリモート システムで実行されているプロセスをデバッグできるようになりました。
  • Visual Studio に付属している CMake のバージョンをバージョン 3.21 にアップグレードしました。 使用可能な内容の詳細については、CMake 3.21 リリース ノートを参照してください。
  • Visual Studio に付属している LLVM ツールが LLVM 12 にアップグレードされました。 詳細については、LLVM のリリース ノートを参照してください。
  • MSVC ツールセットでは既定で、SHA-256 ソース ハッシュがデバッグ レコードで使用されるようになりました。 以前は、ツールセットでは既定でソース ハッシュに MD5 が使用されていました。
  • C++ ワークロードを使用するゲーム開発では、Visual Studio 2022 のサポートを備えた最新の Unreal Engine がインストールされるようになりました。
  • C++ IntelliSense で、インポートされたモジュールとヘッダー ユニットからの型のナビゲーションと構文の強調表示を提供する場合の動作が改善されました。
  • キャッシュされたヘッダーの使用とシンボル データベースへのアクセスを最適化することで、C++ IntelliSense のパフォーマンスを向上させました。これにより、コードにアクセスするための読み込み時間が短縮されます。
  • C++ 用の IntelliSense コード リンターが既定でオンになるようになりました。これにより、すぐに入力候補が表示され、一般的なコードの欠陥の修正が提案されます。
  • スイッチ -fsanitize=fuzzer での libfuzzer のサポート。 詳細については、こちらのドキュメントを参照してください。
  • コード分析ツールでの Null ポインター逆参照の検出を改善しました。
  • コード分析では、_Check_return_ または _Must_inspect_result_ を使用して注釈が付けられた関数の戻り値が確認する必要があることが強制されるようになりました。
  • gsl::not_null のサポートをコード分析に追加しました。
  • C++ モバイル開発ワークロードで NDK r21 LTS に更新しました。
  • C++ AMP ヘッダーは非推奨になりました。 C++ プロジェクトに <amp.h> を含めるとビルド エラーが発生します。 エラーをサイレント状態にするには _SILENCE_AMP_DEPRECATION_WARNINGS を定義します。 詳細については、AMP の非推奨リンクを参照してください。

デバッグと診断

  • プロセス ダイアログへのアタッチの機能強化
  • 例外ヘルパーの機能強化
  • [Force Run to Click](クリックした行の前まで強制実行)
  • メモリ ダンプ診断分析
  • 依存ブレークポイントという新しい種類のブレークポイントをリリースしました。これにより、ブレークポイントを、別のブレークポイントに最初にヒットした場合にのみ構成できるようになります。
  • 外部ソース ノードにさらに更新が追加されたため、サブノードの [Modules without Sources](ソースのないモジュール) の下にモジュールを表示し、シンボルをソリューション エクスプローラー自体から読み込めるようになりました。
  • ブレークポイントの Gutter の機能強化
  • 一時ブレークポイント
  • ブレークポイントのドラッグ アンド ドロップ
  • [外部ソース] ノード (ソリューション エクスプローラー)
  • プロセス ダイアログへのアタッチの機能強化

個人用設定

  • 垂直タブおよび水平タブ用のカラー タブを追加しました
  • テーマ パックを追加し、VS Code のテーマ作成者と協力して、カスタム テーマのコレクションを公開しました
  • VS Code テーマが Visual Studio 2022 で動作するように変換するテーマ コンバーターを作成しました
  • Visual Studio テーマを Windows テーマと同期する機能を追加しました
  • タブ幅のカスタマイズ、アクティブなドキュメントの太字化、docwell の追加の [閉じる] ボタンなど、新しいドキュメント管理機能を追加しました

エディター

  • サブワード ナビゲーションを追加しました
  • 自動保存がプレビュー機能として使用できるようになりました
  • マルチキャレット のコピーと貼り付けのエクスペリエンス

機能拡張

  • Microsoft.VisualStudio.Language.Client アセンブリから API を削除しました
  • VS SDK には、いくつかの破壊的変更が含まれているため、2022 では、Visual Studio 2019 の拡張機能は動作しません。 詳細については、VS SDK のドキュメントを参照してください。
  • VS SDK 参照アセンブリは、VSSDK\VisualStudioIntegration\Common\Assemblies フォルダーにインストールされなくなりました。 お使いのビルドがこれらのアセンブリに依存している場合、プロジェクトを移行して NuGet パッケージを代わりに使用するようにしてください。 オフライン シナリオの場合:
    1. NuGet パッケージの復元元である組織内の NuGet フィードは残しておいてください。
    2. バイナリをチェックインします。
  • ILanguageClient の破壊的変更の修正を追加しました

Cloud Services

  • Azurite は、積極的な開発が終了した Azure Storage Emulator の代わりに、Azure Storage のローカル エミュレーションに使用されます。

Git ツール

[Help](ヘルプ) メニュー

  • 17.0 では、概要関連の資料と役立つヒントにより、[ヘルプ] メニューが再構築されました。
  • Developer Community、リリース ノート、Visual Studio の製品ロードマップ、マイクロソフトのソーシャル メディア ページへのアクセスなどを追加することで、開発チームとのコラボレーションを強化しています。

ホット リロード エクスペリエンス

  • .NET 開発者は、Visual Studio デバッガーを使用してホット リロードを利用できるようになりました。また、多くの .NET 6 アプリケーションの種類では、このデバッガーを使用しなくても利用できます。
  • C++ 開発者は、Visual Studio デバッガーを使用する際にホット リロードを利用できるようになりました。

詳細については、上記のリンクを参照してください。

IntelliCode

  • 行全体の入力候補は、現在のコンテキストに基づいて C# コードの次のチャンクを予測し、カーソルの右側にインライン候補として表示します。
  • 行全体の入力候補は、JetBrains ReSharper の最新のビルドと互換性を持つようになりました。 ReSharpers カスタム入力候補一覧の項目選択に基づいて行の入力候補コンテキストを更新することはサポートされていません。ReSharper ユーザーは、こちらで説明されているように、必要に応じて Visual Studio ネイティブの IntelliSense を使用することを選択できます。

JavaScript/TypeScript

  • 追加のツールでスタンドアロンの JavaScript または TypeScript プロジェクトをビルドする、新しい JavaScript または TypeScript プロジェクトの種類をリリースしました。 コンピューターにインストールされているフレームワークのバージョンを使用して、Visual Studio で Angular と React のプロジェクトを作成できるようになります。
  • Visual Studio テスト エクスプローラーで JavaScript と TypeScript のテストを使用できるようになりました。
  • NPM GUI を使用できるため、Nuget パッケージをダウンロードするのと同じように NPM モジュールをダウンロードできるようになりました

.NET 6 SDK

  • .NET 6 SDK は Visual Studio 2022 に含まれています。

.NET の生産性

  • [Introduce parameter](パラメーターを導入する) リファクタリングにより、新しいパラメーターをメソッドの実装から呼び出し元に移動できるようになりました。
  • データ フロー分析のための [Track Value Source](値ソースの追跡)
  • 再割り当てされた変数に下線を表示するオプション
  • [オーバーライドを生成する] ダイアログに検索オプションを追加しました
  • XML <code> タグのクイック情報に、ホワイトスペースと CDATA ブロックが保持されるようになりました
  • [すべての参照の検索] ウィンドウで、マルチターゲット プロジェクトをグループ化できるようになりました
  • Visual Basic の反復的な型を削除するリファクタリング
  • [実装に移動] を使用しても、オーバーライドされた抽象的な宣言を持つメンバーに移動されなくなります。
  • ソリューション エクスプローラーからフォルダー構造と一致するように名前空間を同期する
  • ソリューション エクスプローラーからバックグラウンド コード分析を構成する
  • 新しい .NET プロジェクトで null 許容参照型が既定で有効になるようになりました
  • C# 10.0 ファイル スコープの名前空間のリファクタリング
  • [逆コンパイルされたソースへの移動] が既定でオンになるようになりました
  • 型チェックよりも null チェックを優先するリファクタリング
  • メソッドで明示的に例外をスローするときに、XML コメントによって <exception> タグが自動的に生成されるようになります
  • [継承の余白] が既定で有効になるようになりました

プログラミング言語

  • C#10

Razor (ASP.NET Core) エディター

  • UI のフリーズが減り、ソリューションの起動時のパフォーマンスが向上しました
  • 一部のソリューションではセマンティックの色付けが最大 2 倍速くなります
  • Razor ファイルでの F7 (コードの表示) のサポート
  • Razor ファイルでのスニペットのサポート。Tab キーを 2 回ではなく、1 回押すことでスニペット セッションが完了するようになります
  • 入れ子になった HTML および Razor コンポーネントがある場合の @code ブロックでの書式設定の向上
  • Razor ファイルでのホット リロードのサポート
  • パフォーマンスの向上
  • 書式設定とインデントの機能強化
  • 新しい Razor エディターの色
  • TagHelper が色分けされ、クイック情報の分類がサポートされ、補完のヒントが表示されるようになりました。
  • Razor コンストラクトの山かっこの強調表示とナビゲーション
  • コメントに、オートコンプリート、スマート インデント、コメントの継続の自動挿入、ブロック コメントのナビゲーションが追加されました

リモート テスト

  • Linux コンテナー、WSL、SSH 接続経由などのリモート環境でのテスト実行を可能にするごく初期の実験的プレビュー。

テスト ツールのサポート

  • テスト エクスプローラーに表示
  • 17.0 以降、新しいバージョンのテスト プラットフォームでは、汎用テストおよび順序指定テストを実行できません。 これらの特定の機能は、MSTestv1 の初期バージョンの一部としてのみ出荷されたもので、MSTestv2 には含まれていません。 これらの機能は使用率が非常に低いことが確認されたため、順序指定テストは最適なテスト手法に反していると考えられるようになりました。
  • 17.0 では、新しい TestSettings ファイルや TestSettings エディターの作成など、一部のテスト エクスペリエンスは使用できません。 テストの実行では引き続き TestSettings ファイルを使用できますが、TestSettings は RunSettings に置き換えられており、ユーザーは改善されたパフォーマンスと機能に移行することをお勧めします。 詳細については、こちらを参照してください。
  • Web ロード テストとコード化された UI テストのサポートの更新。 コード化された UI テストと Web ロード テスト (クラウドベースのロード テスト サービスの終了 | Azure DevOps ブログ (microsoft.com) は 2019 年に正式に非推奨とされました)。 ユーザーへの影響を最小限に抑えるために、Visual Studio 2022 では、これらの機能に対する最小限のサポートが用意されています。 コード化された UI テストと Web ロード テストに移行することをお勧めします。

UWP 拡張 SDK のツールボックスの作成

  • UWP 拡張 SDK は、ツールボックスに表示する種類を SdkManifest.xml ファイルに一覧表示することによって、明示的に宣言することが必要になりました。 以前のバージョンの Visual Studio の動作は変わりません。マニフェスト内のコントロールの一覧が無視され、代わりに SDK のアセンブリのコントロールの種類が動的に列挙されます。

信頼できる場所

  • [信頼の設定] 機能を刷新し、信頼できないコード (ファイル、プロジェクト、フォルダーなど) が IDE 内で開かれようとしているときに警告を表示できるようになりました。
  • 信頼チェックがソリューション フォルダー レベルで行われるようになりました
  • ユーザーが作成したプロジェクトが信頼リストに自動的に追加されます
  • ユーザーは、Visual Studio によって作成された一時的な場所に対する信頼チェックをスキップできます

更新プログラム、LTSC、デプロイ

  • Visual Studio 2022 では、同時にサポートされる複数のサービス ベースラインが、秋と春にリリースされる予定です。 詳細については、Visual Studio のリリース リズムに関するドキュメントと、Visual Studio 2022 製品ライフサイクルに関する記事を参照してください。
  • Visual Studio 2022 に付属する新しいインストーラーには、Visual Studio 製品がどこから更新プログラムを取得するかを構成する機能が用意されています。 これにより、ユーザーは、異なる LTSC から更新プログラムを選択できます。また、マネージド エンタープライズ環境を使用している場合は、クライアントがレイアウトから更新プログラムを取得するようにも構成できます。 更新プログラムのソースを構成する機能は、Visual Studio インストーラーに付属する新機能です。このため、この動作は、Visual Studio のダウンレベル バージョン (Visual Studio 2019 など) にも適用できます。 更新チャネルの構成の詳細については、「Visual Studio を更新する」を参照してください。 ネットワーク レイアウトに対してこの作業を行う方法の詳細については、「Visual Studio 管理者ガイド」を参照してください。
  • Visual Studio がインストールされていなくても、IT 管理者は問題を報告できるようになりました。

ユーザー インターフェイス

  • 既定のアイコンが更新され、刷新されました。

Web ツール

  • [公開の概要] ページの [ホスティング] セクションの右上隅にある [...] メニューに、リモート デバッグおよびプロファイルを開始または停止するアクションが表示されるようになりました
  • [接続済みサービス] ページに、Storage Explorer を起動するアクションが表示されるようになりました
  • .NET 6 に付属する "ASP.NET Core Empty" テンプレートでは、サポートの追加を開始した新しい 'Minimal API' パラダイムが使用されるようになります
  • Azurite は、積極的な開発が終了した Azure Storage Emulator の代わりに、Azure Storage のローカル エミュレーションに使用されます。
  • Visual Studio の接続済みサービス エクスペリエンス経由で Microsoft ID プラットフォームを使用して、ASP.NET Core アプリケーションに認証を追加できます。

.NET Framework 向け WPF XAML デザイナー

  • 現在の .NET Framework 向け WPF XAML デザイナーは、新しい .NET Framework 向け WPF XAML デザイナーに置き換えられます。これは、.NET (.NET Core) 向け WPF XAML デザイナーに使用されているアーキテクチャと同じアーキテクチャに基づいています。 Visual Studio のエクスペリエンスの外観は同じですが、.design.dll および Microsoft.Windows.Design.Extensibility に基づいた以前のモデルは非推奨になったため、サードパーティのコントロール ベンダーは新しい機能拡張モデルをサポートする必要があります。 .NET (.NET Core) 向けの .designtools.dll 拡張機能を既に作成している場合は、その同じ拡張機能が新しい .NET Framework 向け WPF XAML デザイナーでも機能します。 新しい機能拡張モデルに移行する方法の詳細については、以下の移行のドキュメントを参照してください。

XAML ホット リロード

  • XAML ホット リロードの変更 - アプリ内のツール バーと設定に対する軽微な変更

XAML ライブ プレビュー

  • アプリを Android Emulator で実行しているか UWP デスクトップ アプリとして実行している WPF、UWP、WinUI、および Xamarin.Forms の開発者が、XAML Live Preview を利用できるようになりました。 Live Preview は、実行中のアプリケーションのユーザー インターフェイスをキャプチャして、Visual Studio 内のドッキング ウィンドウに表示します。 これにより、XAML ホット リロードを使用してアプリを変更すると同時に、Visual Studio 自体の内部でそれらの変更を簡単に確認できるようになります。つまり、ライブ XAML コードを変更しながら、実行中のアプリと Visual Studio の間でタブを移動する必要がなくなります。

詳細については、上のリンクをクリックしてください。

XAML サンプル データ

  • WPF アプリケーションのツールボックスから DataGrid、ListBox、および ListView コントロールを作成するときに、既定でデザイン時のサンプル データが追加されるようになります。 この動作を無効にするには、[ツール] -> [オプション] -> [XAML デザイナー] の下にある [Automatically add sample data on element creation](要素の作成時にサンプル データを自動的に追加する) チェックボックスをオフにします。
  • サンプル データの詳細については、サンプル データのドキュメントを参照してください。

XAML バインディング エクスペリエンスの向上

  • データ バインディングを高速かつ簡単に行えるようにするため、プロパティ インスペクターからデータ バインディング ダイアログへのクイック アクセス、クイック アクションからのバインドの設定機能、データ バインディング ダイアログ内でバインドするプロパティを選択する機能など、数多くの機能が強化されました。

詳細については、上のリンクをクリックしてください。

既知の問題

.NET によるモバイル開発

Python ツール

C++ の IntelliSense

Visual Studio 2022 バージョン 17.0.0 のこのリリースの新機能の詳細

デバッグと診断

  • プロセス ダイアログへのアタッチの機能強化
  • ウィンドウの下部にあるトグルによる新しい親子プロセス リスト ビュー
    • ビューの選択は保持されます。
    • 親子ビューでキーボードの左キーを押すと、親プロセスに移動します。
    • すべての列は、元のビューと同じように並べ替えることができます。
  • [New Command Line](新しいコマンド ライン) 列は両方のビューで使用できます。
  • w3wp プロセスの "タイトル列" にアプリ プール名が表示される

![プロセスにアタッチ](media/17.0/17.0_P2_attach_to _process_3.png)

  • catch ブロックに例外ヘルパーを追加しました。 これにより、マネージド ステップで例外が発生し、ステップが catch ブロック内で完了した場合、関連する例外情報と共に例外ヘルパーが表示されます。
  • 新しい [続行] ボタン: 'キャッチされた' 例外に関する例外ヘルパーを表示します。

Exception Handler Updates

  • クリックした行の前まで実行を強制するオプションを追加しました。これを使用すると、選択したカーソル位置に到達するまでデバッガーが実行され、その間のすべてのブレークポイントは無視されます。
  • これを実行するには、目的のコード行の右クリック メニューから [Force Run to Click](クリックした行の前まで強制実行) をクリックします。

Force Run to Cursor

  • アプリケーションがデバッグ モードの場合、Shift キーを押しながらマウスを動かすとコード行の横に表示される緑色のグリフをクリックして、[Force Run to Click](クリックした行の前まで強制実行) を実行することもできます。

Force Run to Cursor Glyph

  • メモリ ダンプ診断分析
    • アナライザー エンジンを改善し、ASP.NET Core のメモリ ダンプでより多くの sync-over-async の問題を検出できるようになりました。
    • CPU 時間で上位 5 つのスレッドを確認することで、コードのどの部分が最も CPU リソースを消費しているかを見つけます。
    • 第 0、1、2 世代と大きなオブジェクト ヒープにメモリ圧迫の兆候がないか、マネージド ヒープ全体を確認します。
    • クラッシュ ダンプがある場合は、アプリケーションのクラッシュの原因となった 2 番目の例外とスレッドをすぐに見つけることができます。
    • 診断の仮説を立てるのに苦労していますか。 クラッシュやハングの正確な原因がよくわからない場合は、例外アナライザーを使用すると、ヒープ上のすべての例外をすばやく見つけて確認することができます。
    • メモリ分析が重要な場合のために、ファイナライザー キュー アナライザーのヒューリスティックを改善しました。 現在は、お客様のコードに焦点を当て、.NET Framework によって管理されるオブジェクトを除外しています。

依存ブレークポイント

これは新しいブレークポイントであり、ユーザーはブレークポイントを、別のブレークポイントに最初にヒットした場合にのみ有効になるように編集できます。 デバッグ時に、Visual Studio デバッガーでは、前提条件のブレークポイントにヒットした場合にのみ、依存ブレークポイントでアプリケーションを一時停止します。 設定ウィンドウで [Only enable when following breakpoint is hit](次のブレークポイントにヒットしたときにのみ有効にする) チェックボックスをオンにし、ドロップダウンから依存ブレークポイントを構成する前提条件のブレークポイントを選択することで、ブレークポイントを依存ブレークポイントに変換できます。

Dependent Breakpoint

ブレークポイントの Gutter の機能強化

ユーザーがブレークポイントを設定できる場所を示す新しいブレークポイント グリフを追加しました。

Breakpoint Glyph

ブレークポイント グリフを右クリックすると、新しいコンテキスト メニューにオプションが表示されます。これによって、より少ないクリックで、拡張ブレークポイント (条件付きブレークポイント、トレースおよび一時ブレークポイント) を簡単に作成できます。

Breakpoint Context Menu

一時ブレークポイント

これは、ユーザーがコードを 1 回だけ中断できるようにする新しいブレークポイントです。 デバッグ時に、Visual Studio デバッガーでは、このブレークポイントでアプリケーション ランタイムを 1 回だけ一時停止し、ヒットした直後に削除します。 設定ウィンドウで [Remove breakpoint once hit](ヒットしたらブレークポイントを削除する) チェック ボックスをオンにすることで、ブレークポイントを一時ブレークポイントに変換できます。 または、ブレークポイントの gutter から新しい右クリック コンテキスト メニューを使用して、このブレークポイントを設定することもできます。

Temporary Breakpoint

ブレークポイントのドラッグ アンド ドロップ

ブレークポイントのドラッグ アンド ドロップ ジェスチャを追加しました。 ブレークポイントを保持し、目的のコード行で解放して、ブレークポイントをある場所から別の場所に移動できるようになりました。 actions または condition 変数がコンテキスト内にある限り、これは拡張ブレークポイントで機能します。

Drag and Drop Breakpoint

[外部ソース] ノード (ソリューション エクスプローラー)

新しい [外部ソース] ノード (ソリューション エクスプローラー) を追加しました。 これは現在、デバッグ中にのみ表示され、ソース サーバーまたはソース リンク情報を含むシンボルが読み込まれたマネージド モジュールのソースが示されます。 デバッグ中に、ソース サーバー情報が存在する読み込まれたマネージド シンボル ファイル (.pdb) がこのノードの下に表示されます。 他のソリューション エクスプローラー フォルダーと同じようにファイルを参照するか、項目をダブルクリックしてソース サーバーからファイルをダウンロードし、それを VS エディターで開くことができます。 External Sources node in Solution explorer

[プロセスにアタッチ] ダイアログの機能強化

[プロセスにアタッチ] ダイアログに新しい自動更新チェック ボックスを追加しました。このチェック ボックスをオンにすると、使用可能なプロセスでプロセス一覧が自動的に更新されます。 [プロセスにアタッチ] ダイアログの新しい [Select any window from desktop](デスクトップから任意のウィンドウを選択) オプションを使用すると、ユーザーはデスクトップから実行中のウィンドウを選択し、それに関連付けられているデバッグ プロセスにアタッチできます。

Attach to process Dialog Improvements

メモリ ダンプ診断分析

Stack Overflow 例外が発生した場合にルート呼び出しフレームを見つけるのは、困難で時間がかかる場合があります。 最新のアナライザーでは [呼び出し履歴] の便利なビューを提供し、問題の分析を高速化するために繰り返されるノイズの多いフレームを削除します。

パーソナル化

VS Code テーマを Visual Studio テーマに変換する

マイクロソフトでは、VS Code テーマが Visual Studio で動作するように変換できるテーマ コンバーター ツールを作成しました。 ここで試してみましょう。

新しい Visual Studio テーマ パック

既定の VS Code テーマは、Visual Studio テーマ パックとして利用できるようになりました。 こちらで、テーマ パックをご確認ください。

テーマを Windows OS に同期する

Visual Studio テーマを Windows テーマに同期する機能を追加しました。これにより、使用可能な環境光の量に基づいてテーマを調整できます。 これを有効にするには、[ツール] > [テーマ] > [システム設定を使用する] の順に移動します。

カラー タブ

カラー タブを有効にするには、[ツール] > [オプション] > [タブとウィンドウ] の順に移動し、[タブの色付け] を有効にします。

Color tabs

エディター

サブワード ナビゲーション

Ctrl + Alt + ← キーと Ctrl + Alt + → キーを押すと、サブワードで移動するようになります。 たとえば、文字列 "HelloWorld" の場合、"Hello" と "World" がサブワードとして識別されます。 [ツール] > [オプション] > [テキスト エディター] > [全般][サブワード ナビゲーション] を有効にすると、ワード関連のコマンド (TransposeWord など) がサブワードとやりとりするようになります。

自動保存

[ツール] > [オプション] > [環境] > [プレビュー機能] で、自動保存を使用できるようになりました。 有効にすると、Visual Studio アプリケーションでフォーカスが失われた (たとえば、別のウィンドウにフォーカスが移った) 場合、可能であれば、すべてのダーティ ドキュメントがディスクに保存されます。 いずれのファイルも保存できない場合は、ユーザーが ([保存] または [名前を付けて保存] コマンドを使用して) 明示的に保存するまでダーティのままとなります。

マルチキャレットのコピーと貼り付けのエクスペリエンス

マルチキャレットのコピーと貼り付けのエクスペリエンスを改善しました。 以前は、複数の行を複数のキャレットに貼り付けると、各キャレットでクリップボード全体が複製されました。 現在は、複数の行を同じ数のキャレットに貼り付けると、各行がそれぞれのキャレットに挿入されます。 マルチキャレットを使用するには、Alt + Shift + "マウス クリック" または Alt + Shift + . を押し、Ctrl + Shift + "方向" キーを使用して選択範囲を展開します。 次に、Ctrl + C キーを押して、複数の選択範囲のテキストをコピーします。 Alt + Shift + ''マウス クリック'' を使用して、目的の場所に貼り付ける行ごとに複数のキャレットを作成します。 最後に、Ctrl + V キーを押して、各行を独自のキャレットに貼り付けます。

Multi-caret copy and paste

さらに、Alt + Shift + ''↑ または ↓ キー'' あるいは Alt + Shift + ''マウス ドラッグ'' を使用して、複数のキャレットで選択できます。 以前は、これらのジェスチャによってボックス選択が作成されました。 現在は、ボックス選択が複数のキャレットに変換されます。 この方法は、個々のキャレットを挿入するために正確な場所をクリックする必要がある場合よりも簡単で高速です。 マルチキャレットの選択範囲を展開するときに、引き続き Alt + Shift + "方向キー" と Alt + Shift + "マウス ドラッグ" でボックス選択を使用する場合は、[ツール] > [オプション] > [テキスト エディター] > [詳細設定] の順に移動し、[ボックス選択を使用] を選択します。

Multi-caret box selection option

拡張性

Microsoft.VisualStudio.LanguageServer.Client では、言語クライアントの初期化に失敗した場合に通知をカスタマイズする新しい方法が導入されています。

初期化タスクは、TSC (タスク ステータス センター) によって追跡されるようになります。 初期化タスクが失敗した場合、ユーザーは TSC に移動して問題の詳細を取得できます。 言語クライアントではユーザーに表示されるメッセージをカスタマイズし、このエラーが何を表し、それを修正するために実行できるアクションに関する情報を提供できるようになります。 これを行うために、ILanguageClient インターフェイスに新しい API のセットが導入されています。 これらの新しい API により、ILanguageClient インターフェイスに破壊的変更が生じる可能性があります。そのため、言語拡張機能では、Visual Studio 2022 で動作するように新しいパッケージを参照する必要があります。

新しい API は以下のとおりです。

  1. ShowNotificationOnInitializeFailed プロパティ - このようなエラーについてユーザーに通知するバブルを言語サーバーに表示するかどうかを決定するブール型プロパティ。

ShowNotificationOnInitializeFailed in the Task Status Center

現在作業しているプロジェクトのユーザー エクスペリエンスにエラーが大きく影響する場合にのみ、このプロパティを true に設定することをお勧めします。

  1. OnServerInitializedFailedAsync メソッド - 言語クライアントの初期化が失敗すると、このメソッドが呼び出されます。 LanguageClientInitializationInfoBase オブジェクトに、エラーがどのように発生したかに関する情報を提供して、言語クライアントが独自の方法でエラーをユーザーに通知したり、エラーのコンテキストでカスタマイズされたメッセージを提供したりできるようにします。 メッセージが指定されている場合は、Visual Studio の [出力] ウィンドウに表示されます。

Language client initialization error in the Output Window

JavaScript/TypeScript

新しい JavaScript/TypeScript プロジェクトの種類がサポートされるようになりました。これにより、Visual Studio でスタンドアロンの Angular、React、Vue プロジェクトを作成できるようになります。 そのプロジェクトは、ローカル コンピューター上にインストールしたフレームワーク CLI ツールを使用して作成されます。 これは、テンプレートのバージョンが、ローカル コンピューター上にある CLI のバージョンに基づくことも意味します。

これらの新しいプロジェクト内では、単体テストを実行し、それらを ASP.NET Core API プロジェクトと統合することができます。 ドキュメントはこちらにあります

  • 追加のツールでスタンドアロンの JavaScript または TypeScript プロジェクトをビルドする、新しい JavaScript または TypeScript プロジェクトの種類をリリースしました。 詳細については、こちらを参照してください
  • NPM GUI を使用できるため、新しい JavaScript/TypeScript プロジェクトで Nuget パッケージをダウンロードするのと同じように NPM モジュールをダウンロードできるようになりました

NPM GUINPM GUI2

.NET および C++ 開発者向けのホット リロード エクスペリエンス

今年の初めに、.NET ホット リロードを発表しました。これは、ホット リロードをできるだけ多くの .NET 開発者が利用できるようにする意欲的なプロジェクトでした。 このプロジェクトでは、Visual Studio 2019 で最初のプレビューが提供され、Visual Studio 2022 で完全なエクスペリエンスが提供されてより多くの機能が実現することを約束しました。 ここで、Visual Studio 2022 GA リリースで完成した機能の詳細について説明いたします。

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

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

この機能のライブ デモを視聴したい場合は、次のいずれかのビデオを確認できます。

Visual Studio でのホット リロード ユーザー エクスペリエンス

Visual Studio 2022 では、.NET と C++ の両方の開発者のホット リロード エクスペリエンスに大幅な改善が加えられました。 ツール バーに [ホット リロード] ボタンがターゲット実装され、外観と機能が向上しました。

最初に目に付くのは、アイコンが新しくなったドロップダウン スタイルの新しいボタンでしょう。 このコマンドの名前は、"コード変更を適用" (初期のプレビュー) から "ホット リロード" に変更されました。

Hot Reload User Experience in Visual Studio 2022

ボタンを展開すると、実行中のアプリケーションの再起動、保存時のホット リロードのオプトイン トグル、新しい設定パネルへのクイック アクセスなどの機能にすばやくアクセスできます。

各新機能の詳細を次に説明します。

  • アプリケーションを簡単に再起動する: デバッガーを使用してアプリを起動したか、デバッガーなしで起動したか (.NET 6 アプリの新機能) に関係なく、リビルドで Rude 編集を適用する必要がある場合に、実行中のアプリケーションを簡単に再起動できるようになりました。
  • 保存時のホット リロード: 以前のプレビュー リリースでは、ASP.NET プロジェクトの保存時のホット リロードの変更のみを適用でき、他のすべてのプロジェクトでは、ホット リロード ボタンを明示的にクリックする必要がありました。 最終リリースでは、任意のプロジェクト タイプで、保存キーを使用してホット リロードできるようになりました。 このオプションはオプトインですが、一度有効にすると、オフにしない限り、その後のすべての Visual Studio セッションにも適用されます。
  • 簡単設定アクセス: ホット リロード オプション パネルが追加され、ホット リロードを有効または無効にするタイミングを詳細に制御できるようになりました。 これらの設定には、Visual Studio の [オプション] > [.NET と C++ のホット リロード] で、または [設定] をクリックして [ホット リロード] ボタンのドロップダウン メニューからアクセスできます。

機能が向上した Rude 編集ダイアログも追加されました。これは、.NET アプリをデバッガーなしで実行するときに使用できます。

New Rude Edit dialog for Hot Reload in Visual Studio 2022

この新しいダイアログでは、次のような機能が強化されています。

  • 各ホット リロード Rude 編集の [Rebuild and Apply Changes](リビルドして変更を適用) への Visual Studio セッション全体のオプトイン オプション。 一度オンにすると、Visual Studio が再起動されるまで、その後のすべての Rude 編集にこれが適用されます。
  • 手動で複数の手順を行わなくても 1 回のクリックで実行できる、リビルドとコード変更の適用コマンド
  • 設定への簡単なアクセス

自動化されたアクションを使用したくない場合は、このダイアログを使用して、以前から実行できた編集を継続することもできます。

既知の制限が 1 つあり、デバッガーを使用する場合、この新しいダイアログは GA リリースでは使用できません。ただし、このシナリオでそれを可能にするための作業は、将来の更新プログラムで完了される予定です。

C++ アプリのサポート

Visual Studio 2022 を使用しており、デバッガーを使用してアプリを起動する場合、[ホット リロード] ボタンを使ってデバッガーで実行しているとき (F5) にネイティブ C++ アプリケーションのホット リロードを実行できます。 ホット リロードは、CMake と OpenFolder プロジェクトを使ってビルドしたアプリでもサポートされます。

このエクスペリエンスには、ネイティブの [エディット コンティニュ] が利用されています。サポートされている編集については、ドキュメントを参照してください。

サポートされている .NET アプリ フレームワークとシナリオ

2021 年 5 月にホット リロードを発表して以来、.NET 開発者から最もよく寄せられた質問の 1 つは、"ホット リロードは、自分の .NET アプリ フレームワーク/バージョンと組み合わせて動作しますか?" というものでした。 大半の状況で、"はい" と答えられるように大きな前進を遂げることができました。次に主な点を示します。

  • Visual Studio 2022 を使用しており、デバッガーを使用してアプリを起動する場合、基本的なホット リロード エクスペリエンスはほとんどの種類の .NET アプリとフレームワーク バージョンで動作します。これには、.NET Framework、.NET Core、および .NET 5+ (該当する場合は C# と VB.NET の両方) が含まれます。 サポートされているアプリの種類には、Web (コードビハインドの変更)、デスクトップ、モバイル、クラウド、およびその他のプロジェクトの種類が含まれます。 ここで重要なのは、デバッガーを使用している場合はホット リロードが使用できるものと考えて、試してみることです。
  • 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 と .NET アプリを使用し、デバッガーを使う場合

Visual Studio 2022 を使用しており、デバッガーを使用してアプリを起動する場合、ホット リロードはほとんどのアプリ フレームワークで動作します。これには、コンソール、Windows フォーム (WinForms)、WPF、UWP、WinUI 3* などの一般的なアプリの種類や、ASP.NET MVC、Web API、さらに以前の Web Forms プロジェクトなど、ほとんどの種類の ASP.NET Web プロジェクト (コードビハインドの編集用) が含まれます。 ここに挙げたものも例に過ぎません。 実際には、.NET を使用しており、Visual Studio マネージド デバッガーを使っていれば、ホット リロードの基本的なサポートを利用できるはずです。

これは、Azure Functions などのプロジェクトもこのシナリオでうまく機能することを意味します。 ご自分の組み合わせでぜひお試しください。問題が見つかった場合は、ぜひお知らせください。

*WinUI 3 では、ホット リロードをサポートしていない混合モードのデバッグが既定で使用されます。 これは、プロジェクト設定でマネージド デバッガーを有効にすることで変更できます。そのようにすると、ホット リロードが正常に機能するようになります。

Visual Studio 2022 と .NET アプリを使用するものの、デバッガーを使わない場合

ほとんどの種類の .NET 6 アプリをターゲットとする場合は、デバッガーなしでホット リロードを利用できます。これには、コンソール、WPF、Windows フォーム (WinForms)、ASP.NET Core MVC、Web API、Blazor などのプロジェクト タイプが含まれます。 デバッガーを使用せずにアプリを起動する十分な理由がある開発者やそうすることを好む開発者もいます。この追加機能が、そのような開発者に、起動時間にほとんど影響を与えることなく価値をもたらすことを願っています。

この機能は .NET 6 以降に限定され、.NET 6 をターゲットとしない (.NET 5 以下をターゲットとする) アプリでは "デバッガーなし" のシナリオはサポートされません。そのような場合、ホット リロード機能を利用するにはデバッガーを使う必要があります。

また、最初のリリースでは、一部のプロジェクト タイプで "デバッガーなし" シナリオがサポートされないことにもご注意ください。 具体的な内容は次のとおりです。

  • UWP アプリでは、デバッガーを使用しないホット リロードはサポートされません。これは仕様によるもので、現時点ではこの改善は計画されていません。
  • iOS と Android をターゲットとする Xamarin.Forms アプリでは、(デバッガーを使ってアプリを起動するかどうかに関係なく) .NET ホット リロードはサポートされていません。ただし、XAML ホット リロードは引き続きサポートされます。
  • NET MAUI アプリでは、当面はデバッガーなしのシナリオはサポートされません。ただし、デバッガーを介した .NET ホット リロードはサポートされます。

.NET 6 アプリで Visual Studio 2022 を使用している場合、ほとんどの種類のシナリオがサポートされています。

Visual Studio 2022 を使用でき、.NET 6 をターゲットとするアプリの作業をしている開発者は、最も洗練され、機能の豊富なホット リロード エクスペリエンスのメリットを活用できます。

主なサポート対象:

  • Blazor アプリ (サーバーおよび WebAssembly*)
  • Blazor と通常の ASP.NET Core Web サイトの両方での Razor ファイル編集
  • CSS ホット リロード
  • デバッガーなしでアプリを実行する場合にホット リロードのサポートを取得する機能 (詳細については上の説明を参照)

.NET 6 をターゲットとする開発者には、将来の Visual Studio 2022 更新プログラムおよび .NET の機能バンドとメジャー リリースでさらに機能強化が提供される予定です。 今後にぜひご期待ください。

*Visual Studio 2022 GA リリースでは、Visual Studio デバッガーを使用している場合の Blazor WebAssembly に対するホット リロードのサポートは、現時点では有効になっていません。 ただし、デバッガーなしで Visual Studio を使用してアプリを起動する場合、ホット リロードを引き続き利用できます。この問題については、今後の Visual Studio 更新プログラムで解決される予定です。

サポートされている ASP.NET Core のシナリオ

現在、多くの ASP.NET シナリオで、基本的なホット リロード エクスペリエンスが幅広くサポートされています。 最も広く利用できる機能は、ほとんどの種類の Web アプリケーションでコードビハインドやその他の .NET クラス ファイルを変更する機能です。 この機能は Visual Studio デバッガーを使っているときに動作し、以前にエディット コンティニュを利用できたすべての場所で利用できます。

.NET 6 をターゲットとする ASP.NET Core 開発者には、下位バージョンの .NET では利用できない追加機能が用意されています。これには次のような機能強化が含まれます。

  • CSHTML: Razor CSHTML ファイルの編集で、多くの種類の編集がサポートされるようになりました。
  • ブラウザーの更新: razor ファイルを編集すると、デバッグ時に Web ブラウザーの変更が自動的に更新されるようになります。 以前は、これはデバッガーなしでアプリを起動するときにのみ可能でした。
  • CSS ホット リロード: アプリの実行中に CSS ファイルを変更できるようになりました。変更内容は、入力するとすぐに実行中のアプリに適用されます。
  • デバッガーなし: Visual Studio を使ってデバッガーなしで Web アプリを起動するとき (Ctrl - F5) に、ホット リロードのサポートが得られようになります。

注: Blazor Wasm アプリに取り組んでいて Visual Studio 2022 (17.0) を使っている場合、Razor Pages のホット リロードはデバッガーなしでアプリを起動するときにのみ機能します。 今後の更新プログラムでデバッガーのサポートを追加する予定です。

サポートされている .NET の編集

.NET ホット リロード エクスペリエンスは、エディット コンティニュ メカニズムを利用しており、以前のバージョンでもともと可能だった機能を超える追加の種類の編集をサポートするためにさまざまな機能強化が行われてきました。 機能強化は次のとおりです。

  • カスタム属性の追加、更新、または削除
  • Record 構造体の追加または更新
  • #line ディレクティブの追加または更新
  • Switch 式の編集
  • ディレクティブ自体の変更を含む、#line ディレクティブを使用するファイルの編集
  • 最上位レベルのステートメントの編集
  • グローバル using ディレクティブ、ファイル スコープ名前空間、改善されたラムダ、パラメーターレス構造体コンストラクターなど、C# 10 の新機能を使ったコードの編集
  • ラムダ パラメーターの名前の変更
  • 既存のメソッドのパラメーター名の変更

上記の機能強化は、ホット リロードとエディット コンティニュの両方のエクスペリエンスで利用できます。

追加の更新プログラム

  • 複数のプロセスを伴う [ホット リロード] と [エディット コンティニュ] : 複数のプロセスに接続されている場合に、[ホット リロード] と [エディット コンティニュ] の両方のエクスペリエンスを確実に使用できるようになりました。 以前はこの機能が完全にサポートされておらず、正しく機能しない場合がありましたが、現在は修正されています。
  • 更新されたエラー/警告メッセージ: EnC とホット リロードの両方にメッセージが適用されている場合に、エラーと警告メッセージがより明確になるように改善しました。 その際に、ホット リロード操作中にエディット コンティニュの用語が使用されないようにメッセージをより汎用的なものにしました
  • .NET アプリの単体テストの高速化: .NET 6 をターゲットとする場合、ホット リロードのテクノロジを、単体テストを高速化する実験的機能として使用できるようになりました。 詳細については、これらのリリース ノートのテストに関するセクションを参照してください。

サポートされていない .NET のシナリオ

最終リリースでも、注意すべきサポート対象外のシナリオがいくつか存在します。

  • iOS と Android のシナリオでの Xamarin.Forms アプリでは、.NET ホット リロードはサポートされません。 UWP アプリをターゲットとする場合、一部のホット リロードを利用できます。 これは仕様によるものであり、これ以上の改善は予定されていません。 (注: 最新の SDK を使う Xamarin.Forms のお客様については、XAML ホット リロードは引き続き利用でき、サポートされます。)
  • .NET MAUI アプリは、このリリースではサポートされていません。.NET MAUI とホット リロードの作業を行う場合は、詳細については Visual Studio 2022 Update 1 Preview 1 のリリース ノートを参照してください。
  • F# を使ってビルドしたアプリや .NET ネイティブをターゲットとするアプリでは、ホット リロードはサポートされません。

.NET の生産性

ソリューション エクスプローラー内のプロジェクトまたはフォルダーの (右クリック) メニューで同期名前空間のリファクタリングを使用できるようになりました。これにより、フォルダー構造と一致するように名前空間を簡単に同期できます。

Sync namespaces from Solution Explorer

バックグラウンド コード分析の構成が、ソリューション エクスプローラーの (右クリック) メニューで使用できるようになりました。 ソリューション エクスプローラーのソリューション ノードを右クリックし、 [分析とコードのクリーンアップ] を選択します。 次に、 [分析スコープの設定] を選択して、バックグラウンド コード分析のスコープを構成します。

  • "パラメーターを導入する" リファクタリングが追加され、これにより、新しいパラメーターを追加すると、メソッドの実装からその呼び出し元に式が移動されます。 式が含まれる行にカーソルを置くか、式を強調表示します。 (Ctrl + .) キーを押して、 [クイック アクションとリファクタリング] メニューをトリガーします。 [Introduce parameter for {0}]({0} にパラメーターを導入する) または [Introduce parameter for all occurrences of {0}]({0} のすべての出現箇所にパラメーターを導入する) を選択します。 どちらのオプションにも、(1) 更新された式をすべての呼び出しサイトに挿入する、(2) 式を返し、呼び出しサイトに引数を追加する新しいメソッドを抽出して作成する、(3) 式を含み、元のメソッドを呼び出すメソッドのオーバーロードを作成するという 3 つのフライアウト オプションが用意されます。

Introduce parameter from Quick Actions menu

  • [Track Value Source](値ソースの追跡) という新しいコマンドがあります。これを使用すると、データ フロー分析を実行して、特定の値が特定のポイントでどのように渡され、どこで渡されたかを調べることができます。 任意のメンバーを右クリックし、右クリック メニューから [Track Value Source](値ソースの追跡) を選択します。

Track value source in right click menu

  • [Value Tracking](値の追跡) ウィンドウが開き、結果を分析できます。

Track Value Source Window

  • 再割り当てされた変数に下線を表示するオプションを追加しました。 既定ではオフになっているので、[ツール] > [オプション] > [テキスト エディター] > [C#] または [Basic] > [詳細] で有効にし、[Underline reassigned variables](再割り当てられた変数に下線を表示する) を選択します。

Underline reassigned variables in Editor

  • [オーバーライドを生成する] ダイアログに検索オプションを追加し、オーバーライドするメンバーをすばやく検索して選択できるようにしました。

Search in Generate Overrides Dialog

  • XML <code> タグのクイック情報に、ホワイトスペースと CDATA ブロックが保持されるようになりました。 要素にカーソルを合わせます。 すると、クイック ヒントによって、ご利用のコードの上にある XML コメントのサポートされているスタイルが表示されます。

Quick Info for XML preserves whitespace

  • [すべての参照の検索] ウィンドウで、マルチターゲット プロジェクトをグループ化し、視覚的なノイズを除去できるようになりました。

Find All Reference Groups Multi-Targeted Projects

  • Visual Basic の反復的な型を削除するリファクタリングが追加されました。
  • [実装に移動] を使用しても、オーバーライドされた抽象的な宣言を持つメンバーに移動されなくなります。

C# 言語ツール

C# 8.0 では、null 許容参照型が導入されており、null が必要かどうかを宣言できます。 null 許容参照型を使用するには、<Nullable>enable</Nullable> 要素をプロジェクト ファイルに追加するか、#nullable enable プラグマをプロジェクト内のすべてのソース ファイルに追加する必要があります。 このプロセスの効率化に役立つように、新しい .NET プロジェクトの <Nullable>enable</Nullable> が自動的に含まれるようになりました。

C# 10.0 では、ファイルスコープの名前空間が導入され、名前空間内でクラス定義を入れ子にしないオプションが提供されています。 名前空間をファイル スコープの名前空間に変換するリファクタリングが追加されました。 ファイル スコープの名前空間を使用するには、最初に <LangVersion>preview</LangVersion> 要素をプロジェクト ファイルに追加する必要があります。 次に、名前空間にカーソルを置きます。 (Ctrl+. ) キーを押して、 [クイック アクションとリファクタリング] メニューをトリガーします。 [Convert to file-scoped namespace](ファイル スコープの名前空間に変換) を選択します。

File-scoped namespace refactoring

値の型に適用するときに is object より is not null を優先するリファクタリングが追加されました。 この新しいリファクタリングを使用するには、型チェックにカーソルを置きます。 (Ctrl+. ) キーを押して、 [クイック アクションとリファクタリング] メニューをトリガーします。 [Prefer null check over type check](型チェックよりも null チェックを優先) を選択します。

逆コンパイルされたソースへの移動

[逆コンパイルされたソースへの移動] が既定でオンになるようになりました。これにより、ライブラリの種類の宣言に移動することができます。 ソース コードのライブラリ シンボルと逆コンパイルされたソースで [定義へ移動] を呼び出すと、[逆コンパイルされたソースへの移動] が使用可能になります。

エディターの強化

XML コメントによって、<summary> タグ内に <exception> タグが自動的に生成されるようになります。これにより、メソッドで明示的に例外がスローされたときの説明を追加できます。

Visual Studio 2019 では、コードの実装とオーバーライドを表すアイコンを余白に追加する継承の余白がリリースされました。 [Inheritance Margin](継承の余白) アイコンをクリックすると、移動先として選択できる継承オプションが表示されます。 このリリースでは、[継承の余白] が既定で有効になっています。 [継承の余白] を無効にするには、 [ツール]>[オプション]>[テキスト エディター]>[C#] または [基本]>[詳細設定] の順に移動し、 [Enable Inheritance Margin](継承の余白を有効にする) の選択を解除します。

Inheritance Margin

プログラミング言語

C# 10

  • レコード構造体および構造体の with 式 (record struct Point(int X, int Y);var newPoint = point with { X = 100 };)。
  • global using ディレクティブ: global using ディレクティブでは、プログラム内の多くのファイルでの同じ using ディレクティブの繰り返しが回避されます。
  • 明確な代入の改善: 明確な代入と null 値の許容の分析では、dictionary?.TryGetValue(key, out value) == true などの一般的なパターンをより適切に処理できます。
  • 定数補間文字列: 定数で構成される補間された文字列自体が定数です。
  • 拡張プロパティ パターン: プロパティ パターンを使用すると、入れ子になったメンバーにアクセスできます (if (e is MethodCallExpression { Method.Name: "MethodName" }))。
  • シール レコード ToString: レコードで、シールされた ToString を持つ基本レコードを継承できます。
  • 増分ソース ジェネレーター: ソース生成パイプラインを分割し、中間結果をキャッシュすることで、大規模なプロジェクトでのソース生成エクスペリエンスを向上させます。
  • 混合分解: 分解代入と分解宣言を組み合わせて使用できます ((existingLocal, var declaredLocal) = expression)。
  • メソッドレベルの AsyncMethodBuilder: asyncメソッドのコンパイルに使用される AsyncMethodBuilder は、ローカルでオーバーライドできます。
  • #line span ディレクティブ: Razor のようなソース ジェネレーターで、宛先スパンを指定する #line ディレクティブを使用して行マッピングをきめ細かく制御できます (#line (startLine, startChar) - (endLine, endChar) charOffset "fileName")。
  • ラムダの機能強化: ラムダでは属性と戻り値の型を使用できます。ラムダおよびメソッド グループには、自然なデリゲート型があります (var f = short () => 1;)。
  • 補完された文字列ハンドラー: 補完された文字列ハンドラー型を使用すると、代入と呼び出しで挿入された文字列を効率的にフォーマットすることができます。
  • ファイルスコープの名前空間: 名前空間が 1 つのファイルには、余分な中かっこやインデントは必要ありません (namespace X.Y.Z;)。
  • パラメーターなし構造体コンストラクター: 構造体型のパラメーターなしコンストラクターとインスタンス フィールド初期化子をサポートします。
  • CallerArgumentExpression: この属性を使用すると、メソッドに渡された式を文字列として取り込めます。

詳細については、C# 言語機能の状態破壊的変更に関する記事を参照してください。

Razor (ASP.NET Core) エディター

  • Razor ファイルでホット リロードがサポートされるようになりました。

Reload Support in Razor Files

  • Razor エディターのパフォーマンスを大幅に向上しました。

  • 書式設定とインデントが強化され、信頼性が高まり、大幅に高速になりました。

  • 新しい Razor の色を追加しました。 これらの色は、[ツール] > [オプション] > [環境] > [フォントと色] でカスタマイズできます。

  • クイック情報と IntelliSense の補完ヒントで TagHelper が色分けされ、分類がサポートされるようになりました。

TagHelpers Classification Support

  • Razor コンストラクトの山かっこの強調表示とナビゲーションを強化しました。

  • コメントに、オートコンプリート、スマート インデント、コメントの継続の自動挿入、ブロック コメントのナビゲーションが追加されました。

初期の実験的プレビューリモート テスト初期実験プレビュー

Linux コンテナー、WSL、SSH 接続経由などのリモート環境でのテスト実行を可能にするごく初期の実験的プレビューがあります。 これは非常に価値のある機能ですが、この機能はフィードバックを集めるごく初期の実験段階の状態であるため、しばらくお待ちください。 また、Visual Studio から接続環境の通信や管理を行うには多くの困難なシナリオがあるため、通常のようにスムーズに操作ができない可能性があります。 この実験的バージョンのリモート テストを使用するために必要なものは次のとおりです。

  • ターゲット環境に必要な依存関係をインストールする必要があります。 つまり、.NET 3.1 をターゲットにしたテストを Linux コンテナーで実行する場合、Dockerfile を使用してコンテナーに .NET 3.1 がインストールされていることを確認する必要があります。 将来的にテストの依存関係をスムーズに取得できるインストール方法を実現したいところですが、現在のところは、環境のプロビジョニングの大部分をユーザーの指定に任せています。
  • [出力] -> [テスト] ペインでリモート環境への接続状態を監視することを計画してください。 たとえば、コンテナーが停止した場合は、[出力] > [テスト] ペインにメッセージが表示されます。 すべてのシナリオを検出できるわけではないので、接続が切断されたと思われる場合は出力を確認することを計画してください。 特に、[出力] ペインが [テスト] に設定されていない場合は、メッセージがすぐに表示されないことがあります。 接続が切断されたときの最適な通知モデルについては、まだ試行錯誤中なので、フィードバックをお待ちしています。 接続が切断されたように思われる場合は、テスト エクスプローラーでリモート テスト環境のドロップダウンを使用して、接続をローカル環境に戻し、再度リモート環境を選択して接続を再開することができます。
  • この実験的プレビューは、現時点では .NET のテストに限定されています。 C++ のリモート テスト エクスペリエンスのサポートに対する関心は認識しており、いずれは提供したいと考えています。

リモート テストを試すにはどうすればよいですか。

  • 公式ドキュメントは実験期間が終わった後に公開する予定です。 現在のところ、リモート テストを始めるために必要なものは次のとおりです。
  • ソリューションのルートで testenvironments.json を使用して環境を指定します。 json ファイルの構造は次のスキーマに従います。
{
    "version": "1", // value must be 1
    "environments": [
        { "name": "<unique name>", ... },
        ...
    ]
}
  • ローカル コンテナーの接続
    • ローカルで動作しているコンテナーに接続するには、ローカル マシンに Docker Desktop が必要です。 必要に応じて、パフォーマンス向上のために WSL2 統合を有効にします
    • Dockerfile の場合、ソリューションのルートにある testEnvironments.json で環境を指定できます。
          {
          "name": "<name>",
          "localRoot": "<path to local environment>", // optional
          "type": "docker",
          "dockerImage": "<docker image tag>",
          }
      
      例:
      {
      "version": "1",
      "environments": [
          {
          "name": "linux dotnet-core-sdk-3.1",
          "type": "docker",
          "dockerImage": "testenv"
          }
      ]
      }
      
    • .NET 3.1 をターゲットにしたテストを実行するための Dockerfile の例を次に示します。
      FROM mcr.microsoft.com/dotnet/core/sdk:3.1
      
    • 次のコマンド (最後の "." を含む) を使用してコンテナーをビルドします: docker build -t <docker image name> -f <path to Dockerfile> .
  • ローカルの WSL2 接続
    • ローカル マシン上で WSL2 統合を有効にする必要があります。
    • この環境は、次のスキーマに従って、ソリューションのルートの testEnvironments.json で指定できます。
      {
      "version": "1",
      "environments": [
          {
          "name": "WSL-Ubuntu",
          "type": "wsl",
          "wslDistribution": "Ubuntu"
          }
      ]
      }
      
  • SSH 接続
    • [ツール] > [オプション] > [クロス プラットフォーム] > [接続マネージャー] に移動し、SSH 接続の追加と削除を行います。 [追加] を選択すると、ホスト名、ポート、必要な資格情報を入力できます。
    • この環境は、次のようにソリューションのルートにある testEnvironments.json で指定できます。
      {
      "version": "1",
      "environments": [
          {
          "name": "ssh-remote",
          "type": "ssh",
          "remoteUri": "ssh://user@hostname:22"
          }
      ]
      }
      
  • アクティブな環境は、テスト エクスプローラー ツール バーのドロップダウンを使用して選択します。 現在、アクティブにできるテスト環境は一度に 1 つだけです。

Remote testing environment drop down in Test Explorer

  • 環境が選択されると、テストが検出され、新しい環境で実行されます。

Tests are discovered and executed in remote environments

  • テストをリモート環境内で実行してデバッグできるようになりました。

    View test results from remote environment in the test explorer

  • テスト エクスプローラーにより、不足している環境の前提条件をインストールするように求められ、インストールが試行されることがありますが、最終的には、リモート環境のプロビジョニングの大部分はユーザーの指定に委ねられています。

テスト エクスプローラーでのホット リロード [試験段階]: バックグラウンドでホット リロード テクノロジを使用して、テスト エクスペリエンスを高速化する新しい試験段階の機能を試せるようになりました。 これは、フル ビルドがまだ必要な最初のテストの実行後に、軽微な変更を行い、テストを実行でき、フル ビルドをもう一度行わなくても、それらのすべての更新が反映されることを意味します。 作業を開始し、詳細な注意事項を確認する場合は、以下の詳細を参照してください。

Hot reload for the Test Explorer in Visual Studio enables you to run tests without requiring a build between minor edits

  • このエクスペリエンスは、.NET 6 を対象とするプロジェクトでのみ使用できます。[ツール] > [オプション] > [テスト] の順に移動して選択する必要があります

Screenshot of Visual Studio showing enable hot reload option in Tools > Options > Test.

  • このオプションが有効になっている場合、エディターに保存されていない変更があってもテストが更新されます。 ビルドしていないため、bin フォルダー内のディスク上のバイナリが古くなっています。 これは、ディスク上の内容と Visual Studio でのテスト結果の間で不一致が生じる可能性があることを意味します。 チェックインする前にこれらを解決するために、(Ctrl + Shift + B) を使用してフル ビルドを行っていることを確認してください。 明示的なビルドでは、ホット リロードのテスト結果が、通常のフル ビルドのテスト結果に置き換えられます。

  • ホット リロードでは選択できない特定の編集の種類があります。そのような場合は、既定でフル ビルドを行う前の動作に戻ります。 Visual Studio の変更のみが追跡されており、エディターでのターゲットの変更などのあいまいなケースでは、既定でフル ビルドが必要な動作に戻る場合があることにも注意してください。

  • (1000 を超えるメソッド名の名前変更など) 特定の大きな変更の場合、単にリビルドするよりもホット リロードに時間がかかることがあります。 このような場合は、ユーザーに対して、ホット リロードを待機するのではなく、フル リビルド行うように求めるメッセージが出力されます。

  • スタック トレースは、テスト エクスプローラーでのホット リロードではまだ使用できません。 スタック トレースを使用する必要がある場合は、フル ビルドを行うことをお勧めします。

テスト ツール

  • [テスト エクスプローラーに表示] (Ctrl + E、S) : [テスト エクスプローラーに表示] は、エディターのテスト メソッド内のカーソルの位置から、テスト エクスプローラー内のテストの場所に移動する機能です。 これは、現在作業しているドキュメントをソリューション エクスプローラーで強調表示された状態を維持するアクティブ ドキュメントとの同期という同様の機能が連想されるかもしれません。 これは Developer Community で投票数が多い項目の 1 つでした。投票してくださったすべての方に感謝します。この機能に優先順位を付けるのに役立ちました。 [テスト エクスプローラーに表示] は、エディターの右クリック メニュー、CodeLens テスト グリフ、およびソリューション エクスプローラーでの右クリックでも使用できます。

    Show in Test Explorer from right-click menuShow in Test Explorer from CodeLens

  • Web ロード テストとコード化された UI テストのサポート更新: Web ロード テスト レコーダーは、Visual Studio 2022 で使用できます。 コード化された UI テスト レコーダーは Visual Studio 2022 には含まれなくなります。 引き続きコード化された UI テストを実行し、Visual Studio 2022 でコードを記述することで新しいテストを作成できるようになりますが、レコーダーは移植できない 32 ビットの依存関係に依存します。 引き続き Visual Studio 2019 をサイド バイ サイドでインストールして、コード化された UI レコーダーを使用できます。 繰り返しますが、Web ロード テストとコード化された UI テストは 2019 では非推奨となりました。ユーザーへの影響を最小限に抑えられる場合は製品からそれらを削除することを計画しています。 Web UI テストに関心をお持ちのユーザーには、新しいクロスプラットフォームおよびオープン ソースの Web テスト フレームワークである Playwright を採用することを強くお勧めします。 すべての主要なブラウザーをサポートし、非同期コードをより適切に処理することに加えて、Playwright にはテスト記録機能も組み込まれています。

信頼できる場所

  • [信頼の設定] の見直しの一環として、"Web のマーク" チェックを削除し、過去に信頼されたことがないコード (ファイル、プロジェクト、フォルダーなど) を開こうとしたときに表示される警告ダイアログを追加しました。
  • 現在のフォルダーまたは親フォルダーの場所でコードを信頼できるようになりました。
  • ユーザーによって作成されたプロジェクトは、そのユーザーの信頼できる場所の一覧に自動的に追加されます。
  • Visual Studio 機能によって作成された一時的な場所の信頼チェックをスキップできます。

IDE 内でコンテンツ (ソリューション、プロジェクト、ファイル、フォルダーなど) が開かれる前に、そのフォルダーの場所が以前に信頼されているかどうかが確認されます。

信頼されていないコードが検出された場合は、セキュリティへの影響について警告ダイアログのアラートが表示され、通常の IDE 操作の前にコードを信頼するように求められます。

注: 現在、この機能は既定でオフになっていますが、[オプション] > [信頼の設定] > [コンテンツを開く前に信頼の決定を要求する] の順に選択することにより有効にできます。

外部ソース ノードの更新

ソリューション エクスプローラーの外部ソース ノードでも C++ がサポートされるようになりました。 さらに、シンボルがまだ読み込まれていないすべてのモジュールを提供する新しいサブノードが追加されました。

External Sources node in Solution explorer supports C++

右クリック コンテキスト メニューを使用して、ソリューション エクスプローラーから直接シンボルを読み込むこともできるため、モジュールを外部ソース ノードに表示することができます。 外部ソース ノードのファイルもアルファベット順に並べ替えられるようになりました。

External Sources menu

更新および刷新されたアイコン画像

  • Visual Studio 2022 のユーザー インターフェイスを刷新するという目標の一環として、一貫性、読みやすさ、親しみやすさに基づいて、IDE 全体のアイコンが刷新され、更新されました。

Examples of new icons with dark and light backgrounds

XAML ホット リロード

XAML ホット リロードの設定とアプリ内ツール バーが更新されました。これにより、設定とアプリ内エクスペリエンスが、.NET ホット リロードではなく、XAML ホット リロードに関連していることがわかりやすくなりました。

Updated in-app toolbar in XAML apps

設定ペインを合理化し、共通のオプションをまとめて整理しました。

Updated XAML Settings options panel

XAML ライブ プレビュー

アプリを Android Emulator で実行しているか UWP デスクトップ アプリとして実行している WPF、UWP、WinUI、および Xamarin.Forms の開発者が、XAML Live Preview を利用できるようになりました。 Live Preview は、実行中のアプリケーションのユーザー インターフェイスをキャプチャして、Visual Studio 内のドッキング ウィンドウに表示します。 これにより、XAML ホット リロードを使用してアプリを変更すると同時に、Visual Studio 自体の内部でそれらの変更を簡単に確認できるようになります。つまり、ライブ XAML コードを変更しながら、実行中のアプリと Visual Studio の間でタブを移動する必要がなくなります。

Live Preview of XAML Desktop Apps UI

作業を開始するには:

  • デバッガーを使用して、サポートされているアプリケーションを起動する
  • 「XAML Live Preview」と入力してクイック検索を使用するか、アプリ内のツールバーの [Show in XAML Live Preview] \ (xaml ライブプレビューで表示 \) ボタンを使用して、XAML ライブ プレビューを有効にする

エクスペリエンスが開始されると、次の機能を使用できるようになります。

  • スクロールとズーム: アプリの UI をキャプチャしたウィンドウのパンとズームを実行できます。そのため、ニーズに合わせてアプリ全体を表示したり、編集したい部分だけを表示したりすることができます。 パンとスクロールを利用するには、タッチ パッド (2 本指スクロール)、マウスのスクロール ホイール、または Ctrl キー + クリックを使用し、コンテンツをドラッグします。
  • ルーラー: 実行中のアプリの上に、1 つまたは複数の水平または垂直ルーラーを追加できます。 これらの線は、マウスまたはキーボードを使用して所定の位置に移動することができます。 キーボードを使用してルーラーを移動するときは、矢印キーを使用すると、正確に位置を指定できます。また、Ctrl + 矢印キーを使用すると、すばやく位置を指定できます。 また、ルーラーを選択 (クリック) して Delete キーを押して、ルーラーを削除することもできます。
  • 要素の選択と情報のヒント: 要素の選択を使用すると、ライブ ビジュアル ツリーまたはアプリ内ツール バーから使用できるものと同じ機能を使用して、編集する XAML 要素を選択できます。 また、選択した後、新しい '情報のヒント' 機能を有効にすると、フォント、色、余白と間隔の情報など、選択した要素に関する追加情報を取得することもできます。 [Element Selection](要素の選択) を使用する場合は、[選択された項目のプレビュー] を有効にして ([ライブ ビジュアル ツリー] ツール バーのボタンまたは [デバッグ] > [オプション] > [ホット リロード] 設定します)、ソースの XAML に移動することを検討してください。
  • Windows の切り替え: キャプチャするアプリ ウィンドウを制御できます。

XAML バインディング エクスペリエンスの向上

  • プロパティ インスペクターの [データ バインディング] アイコンが改善されました。 プロパティの横にある円柱形のアイコンをクリックすることにより、データ バインディング ダイアログにすばやくアクセスできるようになりました。また、[x] アイコンをクリックしてバインドをクリアすることもできます。

Binding icons in Property Inspector

  • XAML デザイナーから数回クリックするだけでバインドを作成できるように、クイック アクションに [Binding](バインド) タブが追加されました。

Binding tab in Quick Actions

  • プロパティをすぐに選択できるように、データ バインディング ダイアログに [ターゲット プロパティ] コンボ ボックスが追加されました。

Updated Data Binding Dialog with Target Property combo box

Developer Community からの投票数が多い問題

このリリースの Developer Community 修正プログラムの完全な一覧を参照してください。


既知の問題

Visual Studio 2022 のすべての未解決のイシューと、利用可能な回避策については、以下のリンクから参照してください。

フィードバックと提案

皆様のご意見をお待ちしております。 インストーラーまたは Visual Studio IDE の右上隅にある [フィードバックの送信] アイコンを使用するか、[ヘルプ] > [フィードバックの送信] から、問題の報告または機能の提案Feedback Icon を行うことができます。 Visual Studio Developer Community を使用して問題を追跡でき、コメントを追加したり、解決策を見つけたりできます。 ライブ チャット サポートを介して、無料のインストールのヘルプを取得することもできます。


ブログ

開発者ツールのブログで提供されている洞察や推奨事項を活用すると、すべての新しいリリースに関する最新情報を入手し続けることができ、さまざまな機能について掘り下げた記事を参照することもできます。


ページのトップへ