noxi雑記

.NET、Angularまわりの小ネタブログ

ビルドや発行時に.NET Core、 .NET Standardのアセンブリのバージョンを指定する

CI のパイプラインで dotnet コマンドを使用して .NET Core や .NET Standard のアセンブリを生成する時に、生成されるアセンブリのバージョンを差し込みたい場合があります。 csproj ファイルで指定する方法とコマンドの引数の2つの方法で指定することができます。


csproj ファイルで指定する

.NET Core 以降の csproj ファイルは .NET Framework 時代の csproj ファイルとは大幅に構造が異なります。 AssemblyInfo に含まれていたアセンブリ名やバージョンといった情報は csproj の記述から自動的に生成されるようになりました。 Visual Studio のプロジェクトプロパティから設定すると、 csproj ファイルにアセンブリ情報が記述されます。

f:id:noxi515:20190416232042p:plain
Visual Studioのプロジェクトプロパティ(パッケージ)

このプロジェクトプロパティ画面からパッケージバージョン、アセンブリバージョン、アセンブリファイルバージョンの値を設定すると 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

f:id:noxi515:20190416233459p:plain
csprojの情報が反映されたアセンブリのプロパティ

コマンドライン引数で指定する

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