Directory.Build.props を使った「複数プロジェクトのバージョン一括管理」入門
Directory.Build.props を使った「複数プロジェクトのバージョン一括管理」入門
〜実は公式サポートされている標準機能です〜
.NET のソリューションを複数プロジェクトで構成していると、 こんな悩みにぶつかったことはありませんか?
- バージョン番号を変更するたびに、すべての
.csprojを修正している - NuGet パッケージと AssemblyVersion がズレる
- テスト用・サンプル用プロジェクトだけ更新し忘れる
- MSIX / Store 提出時のバージョン管理が地獄
実はこれ、MSBuild の公式機能で綺麗に解決できます。
結論:Directory.Build.props を使えば一発です
Directory.Build.props を使うことで、
- 複数プロジェクトの バージョン情報を一括管理
.csprojを汚さずに共通設定を集約- CI / NuGet / MSIX すべてに自然に反映
が可能になります。
しかもこれは 裏技でもハックでもなく、公式仕様です。
(Filesのソースを見ていて気が付きました。)
Directory.Build.props とは?
Directory.Build.props は、
MSBuild が自動的に読み込む共通設定ファイルです。
特徴はとてもシンプル:
- ソリューション直下(または親フォルダ)に置くだけ
- 配下のすべての SDK-style project に自動適用
- 各
.csprojにImportを書く必要なし
MSBuild automatically imports Directory.Build.props if it exists in the directory tree.
これは Microsoft の公式ドキュメントにも明記されています。
なぜ知られていないのか?
理由はだいたいこのあたりです:
- 単一プロジェクトでは恩恵が少ない
- Visual Studio が自動生成してくれない
- 既存プロジェクトでは後から気づきにくい
- 「非公式テクニック」と誤解されがち
しかし実際には、 Microsoft 自身が大規模ソリューションで前提として使っている仕組みです。
実践:バージョンを一括管理する
Directory.Build.props(例)
<Project> <PropertyGroup> <!-- NuGet / アプリ全体のバージョン --> <Version>1.2.3</Version> <!-- Assembly 情報 --> <AssemblyVersion>1.2.0.0</AssemblyVersion> <FileVersion>1.2.3.0</FileVersion> <InformationalVersion>1.2.3</InformationalVersion> </PropertyGroup> </Project>
これだけで:
- すべてのプロジェクトのバージョンが統一
dotnet builddotnet packdotnet publish
すべてに自動反映されます。
csproj 側はどうなる?
何も書かなくてOKです。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0-windows</TargetFramework> </PropertyGroup> </Project>
バージョン情報は
Directory.Build.props から流れ込んできます。
Debug / Release でバージョンを分けたい場合
これも公式に想定されている使い方です。
<PropertyGroup> <VersionPrefix>1.2.3</VersionPrefix> <VersionSuffix Condition="'$(Configuration)' == 'Debug'">dev</VersionSuffix> </PropertyGroup>
- Debug →
1.2.3-dev - Release →
1.2.3
CI との相性も抜群です。
NuGet / MSIX / Store 提出でも有効?
はい。むしろ必須レベルです。
- NuGet パッケージの Version
- Assembly 情報
- MSIX のバージョン管理
- Store 再提出時の更新漏れ防止
すべて 1 ファイルで制御できます。
よくある誤解
❌ 非公式テクニック?
→ いいえ。MSBuild の正式仕様です
❌ Visual Studio 専用?
→ いいえ。CLI / CI / GitHub Actions でも同じ挙動
❌ 将来壊れそう?
→ Microsoft 自身が前提としているため極めて安全
まとめ
Directory.Build.propsは 公式サポートされている標準機能- 複数プロジェクト構成では 使わない理由がない
- バージョン管理・CI・配布が一気に楽になる
「知らなかった…」という人ほど、 今日から導入すると幸せになれます。
参考リンク(公式)
- MSBuild customization
https://learn.microsoft.com/visualstudio/msbuild/customize-your-build - .NET SDK project overview
https://learn.microsoft.com/dotnet/core/project-sdk/overview
宣伝
個人開発でも Directory.Build.props を使ってバージョン管理しています。
GitHubのContoributionを簡単にシェアできるアプリを作りました。
この記事が役に立ったという方はぜひお試しください。
apps.microsoft.com

Windows11標準のエクスプローラーよりも高速に動くエクスプローラーを作りました。あのFilesよりも高速です。
apps.microsoft.com
