問題点
WorkspaceRootがcsprojよりも上階層となるディレクトリ構成で.NET Coreの環境を構築したときに、自動生成されるビルドタスクだとエラー箇所へのジャンプが「ファイルが見つかりません」となり困ったため、これの対処方法を記載しておきます。
NGの構成
- WorkspaceRoot
- .vscode
- launch.json
- tasks.json
- Project
- Program.cs
- Project.csproj
- .vscode
OKの構成
- WorkspaceRoot
- .vscode
- launch.json
- tasks.json
- Program.cs
- Project.csproj
- .vscode
対処方法
「task.json」の「problemMatcher」の設定で、相対参照のルートとなるディレクトリ設定を.csproがあるディレクトリに変更します。
変更前
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Project/Project.csproj"
],
"problemMatcher": "$msCompile"
}
]
}
変更後
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Project/Project.csproj"
],
"problemMatcher": {
"base": "$msCompile",
"fileLocation": ["relative", "${workspaceRoot}/Project"]
}
}
]
}
現在分かっている問題
上記で示した対処は、別のライブラリプロジェクトを参照設定するようなプロジェクト構成で、かつ、ライブラリプロジェクト側にビルドエラーがあった場合はうまく認識しません。
「dotnet build」コマンドが出力するファイル名は、対象の.csprojのあるディレクトリをルートとしたものになっているようなのですが、対処方法で示した「problemMatcher」は参照元の.csprojがあるディレクトリ固定としているためです。