起動構成ファイルを調べる
- 11 分
Visual Studio Code では launch.json ファイルを使ってデバッガーを構成することを既に確認しました。 シンプルな C# コンソール アプリケーションを作成する場合は、おそらく、コードをデバッグできるようにするために必要なすべての情報を含む launch.json ファイルが Visual Studio Code によって生成されます。 ただし、起動構成の変更が必要になる場合もあるため、起動構成の属性を理解することが重要です。
起動構成の属性
launch.json ファイルの configurations 一覧には 1 つ以上の起動構成が含まれています。 起動構成は、属性を使用して、さまざまなデバッグ シナリオをサポートします。 起動構成ごとに、次の属性が必須です。
-
name: 起動構成に割り当てられたわかりやすい名前。 -
type: この起動構成に使うデバッガーの種類。 -
request: 起動構成の要求の種類。
このセクションでは、発生する可能性があるいくつかの属性を定義します。
名前
name 属性を使って、起動構成の表示名を指定します。
name に割り当てられた値は、起動構成ドロップダウン ([実行とデバッグ] ビューの上部にあるコントロール パネル) に表示されます。
タイプ
type 属性を使って、この起動構成用に使うデバッガーの種類を指定します。
codeclrの値は、.NET 5 以降のアプリケーション (C# アプリケーションを含む) のデバッガーの種類を指定します。
リクエスト
request 属性を使って、この起動構成の要求の種類を指定します。 現在は、launch と attach という値がサポートされています。
PreLaunchTask
preLaunchTask 属性を使って、プログラムをデバッグする前に実行するタスクを指定します。 そのタスク自体は、launch.json ファイルと共に .vscode フォルダーに含まれている、tasks.json ファイル内にあります。
build という起動前タスクを指定すると、アプリケーションを起動する前に dotnet build コマンドが実行されます。
プログラム
program属性は、起動するアプリケーション dll または .NET ホスト実行可能ファイルのパスに設定されます。
通常、このプロパティは ${workspaceFolder}/bin/Debug/<target-framework>/<project-name.dll> という形式になります。
場所は:
-
<target-framework>は、デバッグ プロジェクトがビルドされる対象のフレームワークです。 通常、この値はプロジェクト ファイル内の 'TargetFramework' プロパティとして見つかります。 -
<project-name.dll>は、デバッグされるプロジェクトのビルド出力 dll の名前です。 通常、このプロパティはプロジェクト ファイル名と同じですが、'.dll' という拡張子が付きます。
例: ${workspaceFolder}/bin/Debug/net10.0/Debug101.dll
注
.dll という拡張子は、このファイルがダイナミック リンク ライブラリ (dll) ファイルであることを示します。 プロジェクトの名前が Debug101 である場合、ビルド タスクによって Program.cs ファイルと Debug101.csproj ファイルを使ってプログラムがコンパイルされると、Debug101.dll という名前のファイルが作成されます。 エクスプローラー ビューで Debug101.dll ファイルを見つけるには、[bin] フォルダーと [デバッグ] フォルダーを展開し、コード プロジェクトで使用されている .NET フレームワークを表すフォルダー ("net10.0" など) を開きます。 .NET Framework のバージョンは、.csproj ファイル内で指定されます。
Cwd
cwd 属性を使って、ターゲット プロセスの作業ディレクトリを指定します。
引数
args 属性を使って、起動時にプログラムに渡される引数を指定します。 既定では引数はありません。
コンソール
console 属性を使って、アプリケーションの起動時に使われるコンソールの種類を指定します。 オプションは internalConsole、integratedTerminal、externalTerminal です。 既定の設定は internalConsole です。 コンソールの種類は、次のように定義されます。
-
internalConsole設定は、Visual Studio Code エディターの下にある [パネル] 領域の [デバッグ コンソール] パネルに対応します。 -
integratedTerminal設定は、Visual Studio Code エディターの下にある [パネル] 領域の [出力] パネルに対応します。 -
externalTerminal設定は、外部ターミナル ウィンドウに対応します。 Windows に付属しているコマンド プロンプト アプリケーションは、ターミナル ウィンドウの例です。
Von Bedeutung
[デバッグ コンソール] パネルでは、コンソール入力はサポートされていません。 たとえば、アプリケーションに Console.ReadLine() ステートメントが含まれている場合は、[デバッグ コンソール] を使用できません。 ユーザー入力を読み取る C# コンソール アプリケーションに取り組んでいる場合は、console 設定を integratedTerminal または externalTerminal に設定する必要があります。 コンソールへの書き込みは行うがコンソールからの入力の読み取りは行わないコンソール アプリケーションでは、3 つの console 設定のいずれかを使用できます。
エントリで停止
ターゲットのエントリ ポイントで停止する必要がある場合は、必要に応じて stopAtEntry を true に設定できます。
起動構成を編集する
起動構成ファイルをカスタマイズする必要が生じるシナリオはたくさんあります。 それらのシナリオの多くは、高度な、または複雑なプロジェクト シナリオに関係しています。 このモジュールでは、起動構成ファイルの更新が必要になる 2 つのシンプルなシナリオに焦点を当てます。
- C# コンソール アプリケーションがコンソールから入力を読み取る。
- プロジェクト ワークスペースに複数のアプリケーションが含まれている。
コンソール入力に対応するように起動構成を更新する
前述のように、[デバッグ コンソール] パネルではコンソール入力はサポートされていません。 ユーザー入力に依存するコンソール アプリケーションをデバッグする場合は、関連する起動構成の console 属性を更新する必要があります。
console 属性を編集するには:
Visual Studio Code エディターで launch.json ファイルを開きます。
console 属性を見つけます。
コロンと割り当てられた値を選択し、コロンの文字を入力します。
既存の情報をコロンで上書きすると、Visual Studio Code IntelliSense によってドロップダウン リストに 3 つのオプションが表示されることに注意してください。
integratedTerminal または externalTerminal を選択します。
launch.json ファイルを保存します。
複数のアプリケーションに対応するように起動構成を更新する
起動可能なプロジェクトがワークスペースに 1 つしかない場合、C# 拡張機能によって launch.json ファイルが自動生成されます。 起動可能なプロジェクトが複数ある場合は、launch.json ファイルを手動で変更する必要があります。 Visual Studio Code では、更新可能な基本テンプレートを使って launch.json ファイルが生成されます。 このシナリオでは、デバッグするアプリケーションごとに個別の構成を作成します。 ビルド タスクなどの起動前タスクは、tasks.json ファイル内で作成できます。
複数のコンソール アプリケーションを含むコーディング プロジェクトに取り組んでいるとします。 ルート プロジェクト フォルダー SpecialProjects は、コードに対して作業するときに Visual Studio Code で開くワークスペース フォルダーです。 Project123 と Project456 という 2 つのアプリケーションを開発しています。 [実行とデバッグ] ビューを使って、アプリケーションをデバッグします。 ユーザー インターフェイスからデバッグするアプリケーションを選択する必要があります。 また、保存されたコードの更新は、デバッガーをアプリケーションにアタッチする前にコンパイルする必要もあります。
launch.json ファイルと tasks.json ファイルを更新することで、このシナリオの要件を満たすことができます。
次のスクリーンショットは、[エクスプローラー] ビューと、Project123 と Project456 を含むフォルダー構造を示しています。
launch.json ファイルと tasks.json ファイルを含む .vscode フォルダーは、個々のプロジェクト フォルダーではなく、ワークスペース フォルダー SpecialProjects に関連付けられていることがわかります。
次の例は、"Project123" アプリケーションと "Project456" アプリケーションの両方の構成を含むように launch.json ファイルを構成する方法を示しています。
"version": "0.2.0",
"configurations": [
{
"name": "Launch Project123",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildProject123",
"program": "${workspaceFolder}/Project123/bin/Debug/net10.0/Project123.dll",
"args": [],
"cwd": "${workspaceFolder}/Project123",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Launch Project456",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildProject456",
"program": "${workspaceFolder}/Project456/bin/Debug/net10.0/Project456.dll",
"args": [],
"cwd": "${workspaceFolder}/Project456",
"console": "internalConsole",
"stopAtEntry": false
}
]
name、preLaunchTask、program の各フィールドはすべて特定のアプリケーション用に構成されていることがわかります。
name 属性を使って [実行とデバッグ] ビューのユーザー インターフェイスに表示される選択可能な起動オプションを指定し、program 属性を使ってアプリケーションへのパスを指定しています。 preLaunchTask 属性を使って、デバッガーを起動する前に実行されるタスクの名前を指定しています。 tasks.json ファイルには、名前付きのタスクと、タスクの完了に必要な情報が含まれています。
次の例は、tasks.json ファイルを構成する方法を示しています。 この場合、名前付きのタスクによって、"Project123" アプリケーションと "Project456" アプリケーションに固有のビルド操作を指定しています。 ビルド タスクにより、保存された編集がコンパイルされ、デバッガーにアタッチされる対応する.dll ファイルに反映されるようになります。
"version": "2.0.0",
"tasks": [
{
"label": "buildProject123",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Project123/Project123.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildProject456",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Project456/Project456.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
launch.json ファイルと tasks.json ファイルの更新を完了すると、[実行とデバッグ] ビューに Project123 アプリケーションまたは Project456 アプリケーションをデバッグするための起動オプションが表示されます。 次のスクリーンショットは、起動構成ドロップダウンに表示される起動構成の名前を示しています。
まとめ
このユニットで覚えておく必要がある 2 つの重要な点を次に示します。
- 起動構成は、
name、type、request、preLaunchTask、program、consoleなどの属性を指定するために使用されます。 - 開発者は、プロジェクトの要件に対応するように起動構成を編集できます。