はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】NuGet.Versioningを用いてNuGetのパッケージバージョンなどで使われるSemantic Versioningを扱う

はじめに

今回はSemantic Versioningを簡単に扱えるようになるMS製ライブラリのNuGet.Versioningを紹介したいと思います。
www.nuget.org

概要

Semantic Versioningをプログラムで扱うためにはNuGet.Versioningを推奨されています。

NuGet パッケージのバージョンをプログラムで使用する場合は、パッケージの NuGet.Versioning を使用することを強くお勧めします。 静的メソッド NuGetVersion.Parse(string) はバージョン文字列を解析するために使用でき、VersionComparer は NuGetVersion インスタンスの並べ替えに使用できます。

公式ドキュメントによるとNuGetで用いられるNuGetVersionは、一般的なSemantic Versioningと3つほど相違点があるみたいです。

  • 4 番目のバージョン セグメント (Revision) をサポート
  • メジャー セグメントのみを定義が必須
  • プレリリース コンポーネントに対して、大文字と小文字を区別しない

learn.microsoft.com

それを念頭に置きつつ、利用する・しないを決めてください。

使い方

利用方法は非常にシンプルです。

// Semantic Versioning例
// 1.0.1
// 1.0.1-zzz
// 1.0.1-rc.10
// 1.0.1-rc.2
// 1.0.1-open
// 1.0.1-beta
// 1.0.1-alpha2
// 1.0.1-alpha10
// 1.0.1-aaa
if (NuGetVersion.TryParse("1.2.3", out NuGetVersion? version))
{
    // 1
    Console.WriteLine(version.Major);

    // 2
    Console.WriteLine(version.Minor);

    // 3
    Console.WriteLine(version.Patch);

    // 実は4番目のバージョン セグメント (Revision) をサポートされている
    // Major.Minor.Patch.Revision
    // 0
    Console.WriteLine(version.Revision);
}

TryParseでなく単純なParseもあり、パースできない場合はArgumentExceptionを投げます。

// System.ArgumentException: 'abagaggea' is not a valid version string. (Parameter 'value')
NuGetVersion version = NuGetVersion.Parse("abagaggea");