BEACHSIDE BLOG

MicrosoftとかC#を好むレンジャーの個人メモ

csproj のバージョン 管理 について

.NET Core のプロジェクトでなんか作っててもバージョン情報は、csproj でちょいちょいーっとしか管理してなかったので多少なりとも知っておきたいなーと感じました。

とゆーことで最近(NuGet 4.0 以降、MSBuild 15.1 以降)の.NET Core でのバージョン管理を整理してみました。

csporj でのバージョン設定

バージョン管理は、基本的には csporj に書かれているものが管理されます。

f:id:beachside:20190606110618p:plain

csporj の PropertyGroup 内で設定する項目として VersionVersionPrefixVersionSuffix の3つを把握しておけば大丈夫です。フォーマットは基本的に Semantic Versioning の規約に従っています。
この3つについて csproj に書く時のルールを整理します。

VersionPefix

Format
major.minor.patch 1.2.35
0.1.0

デフォルト値は 1.0.0 です。
どう使うかはパターンによるので後述の Version に書きます。

VersionSuffix

Format
[0-9A-Za-z-] beta
rc-3-build20190603

主にプレビューとかプレリリースのラベルを付けるためのもので任意の文字列をセットできます。Nuget とか npm でもよくみそうなやつですね。
どう使うかはパターンによるので後述の Version に書きます。

Version

Format
major.minor.patch[-prerelease] 5.3.9-beta
0.0.1-alpha-01, 2.0.0

特に何もしないとこのVersion が csproj に書かれています。デフォルト値は 1.0.0 になっています。[-prerelease] の値はオプションなのであっても無くてもよいです。

Version が csproj に明示的に書かれている場合は、その値が反映されます。

カスタマイズの手段として、Version が csproj から消して、VersionPefixVersionSuffix を使うことができます。
その場合は以下のルールがあります。

  • VersionSuffix が empty の場合: VersionPrefix の値
  • VersionSuffix が empty でない場合: VersionPrefix-VersionSuffix

VersionPrefix=1.0.0VersionSuffix=betaだったら Version =1.0.0-beta` となります。

実用的なイメージの例として、Visual Studio からNuget Pakcage 作るときのコマンドや、Build piplineで Nuget Package 作るときの yaml の定義で VersionSuffix を引数で渡してあげるとかできます。


また、どうでもよい情報として、

  • Version, VersionSuffix, VersionPrefix すべてがないと、1.0.0 になります。
  • VersionPrefix しかない場合、1.0.0 + "-" + VersionPrefixの値になります。

この条件に該当してたらもはや管理する気ないだろってやつですね。


その他のバージョン情報

ライブラリやアプリを見ると、PackageVersion, AssemblyVersion, FileVersion, InformationalVersion があります。設定してなくても表示されますが、これってなんぞや?を見てみます。

PackageVersion

Format
major.minor.patch[-prerelease] 5.3.9-beta
0.0.1-alpha-01, 2.0.0

Nuget の Package のバージョンで表示されるやつですね。明示的に設定していない場合、Version が表示されます。

AssemblyVersion

Format
major.minor.patch.revision 4.5.6.2
1.0.0.0

System.Reflection.AssemblyVersionAttribute の値として使われるやつです。詳しくは公式ドキュメントのこちら

デフォルト値は、Version の [-prelelease] の部分を抜いたもです。

FileVersion

Format
major.minor.patch.buildnumber 1.0.0.43952
0.1.0.0

System.Reflection.AssemblyFileVersionAttribute の値として使われます。

デフォルト値は、AssemblyVersion です。

InformationalVersion

これは、System.Reflection.AssemblyInformationalVersionAttribute で使われる値です。フォーマットはなんでもよいみたいですね。

デフォルト値は、Version です。


参考