ビルドや発行時に.NET Core、 .NET Standardのアセンブリのバージョンを指定する
CI のパイプラインで dotnet コマンドを使用して .NET Core や .NET Standard のアセンブリを生成する時に、生成されるアセンブリのバージョンを差し込みたい場合があります。 csproj ファイルで指定する方法とコマンドの引数の2つの方法で指定することができます。
csproj ファイルで指定する
.NET Core 以降の csproj ファイルは .NET Framework 時代の csproj ファイルとは大幅に構造が異なります。 AssemblyInfo に含まれていたアセンブリ名やバージョンといった情報は csproj の記述から自動的に生成されるようになりました。 Visual Studio のプロジェクトプロパティから設定すると、 csproj ファイルにアセンブリ情報が記述されます。
このプロジェクトプロパティ画面からパッケージバージョン、アセンブリバージョン、アセンブリファイルバージョンの値を設定すると csproj にその値が含まれます。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.2</TargetFramework> <Version>1.2.3</Version> <!-- パッケージバージョン --> <AssemblyVersion>10.2.3.4</AssemblyVersion> <!-- アセンブリバージョン --> <FileVersion>11.2.3.5</FileVersion> <!-- アセンブリファイルバージョン --> </PropertyGroup> </Project>
これをビルドした結果のアセンブリプロパティです。 csproj の内容が反映されていることが分かります。 csproj の中身を CI パイプライン上で書き換えることで、アセンブリのバージョンが変更できます。
dotnet build -c Release
コマンドライン引数で指定する
csproj の情報がアセンブリに反映されるのは分かりましたが、いかんせん XML ファイルなので、書き換えが面倒臭いです。 dotnet の build と publish コマンドは MSBuild の -p:Xxx
引数を指定可能なため、これを利用することでアセンブリのプロパティをビルドや発行時に変更することができます。
バージョンを 10.1.0
、アセンブリバージョンを 10.0.0.0
、アセンブリファイルバージョンを 1.0.0.0
に指定するには次のコマンドを実行します。
dotnet build -c Release -p:Version=10.1.0 -p:AssemblyVersion=10.0.0.0 -p:FileVersion=1.0.0.0 dotnet publish -c Release -p:Version=10.1.0 -p:AssemblyVersion=10.0.0.0 -p:FileVersion=1.0.0.0