RelWithDebInfo (Release with Debug Information) は、リリース最適化を適用しながらデバッグ情報も含めるビルド構成です。CMake などのビルドシステムで一般的に使用されている概念を .NET プロジェクトに適用したものです。
.NET プロジェクトでは、標準で以下の2つのビルド構成が提供されています:
| 構成 | 最適化 | デバッグシンボル | 用途 |
|---|---|---|---|
| Debug | 無効 | 有効 | 開発・デバッグ時 |
| Release | 有効 | 無効(または限定的) | 本番リリース時(デバッグ情報不要の場合) |
| RelWithDebInfo | 有効 | 有効 | 本番リリース時・パフォーマンス測定・トラブルシューティング |
RelWithDebInfo 構成は、以下の MSBuild プロパティで定義されます。
<PropertyGroup Condition="'$(Configuration)' == 'RelWithDebInfo'">
<Optimize>true</Optimize>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>true に設定することで、Release と同等のコンパイラ最適化を有効化portable を指定することで、クロスプラットフォーム対応の .pdb ファイルを生成true に設定することで、デバッグシンボルの生成を有効化プロジェクト内のすべての .csproj ファイルに RelWithDebInfo 構成を追加します。
追加場所: </PropertyGroup> と <ItemGroup> の間など、適切な位置
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- 既存のプロパティ -->
</PropertyGroup>
<!-- RelWithDebInfo 構成の追加 -->
<PropertyGroup Condition="'$(Configuration)' == 'RelWithDebInfo'">
<Optimize>true</Optimize>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<!-- 既存のアイテム -->
</ItemGroup>
</Project>GlobalSection(SolutionConfigurationPlatforms) に RelWithDebInfo を追加します。
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
重要: RelWithDebInfo を最初に配置することで、一部の IDE でデフォルト構成として認識されやすくなります。
GlobalSection(ProjectConfigurationPlatforms) で、各プロジェクトに RelWithDebInfo のマッピングを追加します。
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{PROJECT-GUID}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{PROJECT-GUID}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{PROJECT-GUID}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{PROJECT-GUID}.Debug|Any CPU.Build.0 = Debug|Any CPU
{PROJECT-GUID}.Release|Any CPU.ActiveCfg = Release|Any CPU
{PROJECT-GUID}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
各プロジェクトの GUID について、同様のマッピングを追加します。
プロジェクトのルートディレクトリに Directory.Build.props ファイルを作成し、デフォルトのビルド構成を RelWithDebInfo に設定します。
<Project>
<!--
.NET用 Directory.Build.props
このファイルは、.NET SDK のビルドシステムにより自動的に認識され、
このディレクトリおよびサブディレクトリ内のすべての .csproj プロジェクトに対して
プロジェクトファイルよりも先に評価されます。
主な用途:
- プロジェクト全体で共通のプロパティやビルド設定を一元管理
- デフォルト値の設定 (プロジェクトファイルで上書き可能)
参考: https://learn.microsoft.com/ja-jp/visualstudio/msbuild/customize-by-directory
-->
<!-- デフォルトのビルド構成を RelWithDebInfo に設定 -->
<!--
-c オプション未指定時の動作:
- dotnet build → RelWithDebInfo でビルド
- dotnet test → RelWithDebInfo でビルド
- dotnet run → RelWithDebInfo でビルド
明示的な構成指定で上書き可能:
- dotnet build -c Debug → Debug でビルド
- dotnet build -c Release → Release でビルド
-->
<PropertyGroup>
<Configuration Condition="'$(Configuration)' == ''">RelWithDebInfo</Configuration>
</PropertyGroup>
</Project><Configuration> を設定することもできますが、SDK の評価タイミングの問題で効果がない場合がありますDirectory.Build.props を使用することで、確実にデフォルト構成を設定できますdotnet buildDirectory.Build.props の設定により、構成を指定しない場合は RelWithDebInfo でビルドされます。
dotnet build -c Debug
dotnet build -c Release
dotnet build -c RelWithDebInfodotnet test
dotnet test -c Debug
dotnet test -c RelWithDebInfodotnet run --project <project-path>
dotnet run --project <project-path> -c Release構成が正しく適用されているかは、ビルド出力のパスで確認できます:
dotnet build
dotnet build -c Debug制限事項: C# Dev Kit には、UI からビルド構成を選択する機能が現時点で存在しません。
csharp.preview.improvedLaunchExperience 設定は起動構成の選択用で、ビルド構成の切り替えには使用できない回避策:
1. 統合ターミナルを使用 (推奨)
- VS Code の統合ターミナルから dotnet build -c <構成> を実行
- Directory.Build.props の設定により、デフォルトで RelWithDebInfo が使用される
.vscode/tasks.json に異なる構成のビルドタスクを作成.sln ファイルで RelWithDebInfo を最初に配置することで、デフォルトとして認識されやすいRelWithDebInfo をデフォルト構成に設定することで、以下のメリットがあります:
project-root/
+-- Directory.Build.props # デフォルト構成: RelWithDebInfo
+-- solution.sln # RelWithDebInfo を最初に配置
+-- src/
| +-- Project1/
| | +-- Project1.csproj # RelWithDebInfo 構成を定義
| +-- Project2/
| +-- Project2.csproj # RelWithDebInfo 構成を定義
+-- test/
+-- Tests/
+-- Tests.csproj # RelWithDebInfo 構成を定義
-c RelWithDebInfo を明示的に指定することを推奨症状: dotnet build を実行しても Debug でビルドされる
原因と対策:
1. Directory.Build.props がプロジェクトルートに存在するか確認
2. ファイルのエンコーディングが UTF-8 であることを確認
3. XML の構文エラーがないか確認
症状: C# Dev Kit のソリューションエクスプローラーに RelWithDebInfo が表示されない
対策:
1. VS Code のウィンドウをリロード
2. .sln ファイルが正しく更新されているか確認
3. ソリューションをクローズして再度開く
症状: bin/Debug/ にビルドされる
確認事項:
1. プロジェクトファイルで明示的に <Configuration>Debug</Configuration> が設定されていないか確認
2. IDE の設定で構成がオーバーライドされていないか確認
RelWithDebInfo ビルド構成を .NET プロジェクトに追加することで、以下の利点が得られます:
推奨事項: 多くのプロダクションシステムでは、RelWithDebInfo を本番リリースのデフォルト構成として採用しています。デバッグシンボルのオーバーヘッドは最小限であり、トラブルシューティングの効率向上による利点が大きく上回ります。
特に CI/CD パイプラインのデフォルト構成として RelWithDebInfo を採用することで、継続的にパフォーマンスを監視しながら、問題発生時には迅速なデバッグが可能になります。