[C#] .NET 8 SDK でアセンブリの製品バージョンに Git ハッシュを自動付与されないようにする

2023-12-15 (金)

.NET SDK 8 Preview 4 以降、AssemblyInformationalVersion の末尾に Git SHA が自動付与されるようになりました。
これは SDK の仕様なので、.NET Framework を対象とするプロジェクトにも影響します。この自動付与を無効に設定する方法を説明します。

環境

  • .NET 8.0.100
  • C# 12.0
  • Visual Studio 2022 Version Version 17.8.3
  • Windows 11 Pro 22H2 22621.2861

結果

.csproj もしくは Directory.Build.props に以下の設定を追加します。

<Project>

  <PropertyGroup>
    <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
  </PropertyGroup>

</Project>

説明

ここに .NET 8 SDK の破壊的変更が記載されています。
https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/8.0/source-link

ビルドプロセスまたはコードで InformationalVersion のソースリビジョン情報を期待していない場合は、プロジェクトファイルで IncludeSourceRevisionInInformationalVersion プロパティを false に設定することで、新しい動作を無効にできます。

IncludeSourceRevisionInInformationalVersion の説明はここにあります。
MSBuild properties for Microsoft.NET.Sdk - .NET | Microsoft Learn

$(SourceRevisionId) プロパティが存在する場合は、InformationalVersion に追加されます。この動作を無効にするには、IncludeSourceRevisionInInformationalVersion を使用します。

動作確認

実際に動作確認してみます。

.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <VersionPrefix>2.0.0</VersionPrefix>
    <VersionSuffix>beta.1</VersionSuffix>
    <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
  </PropertyGroup>

</Project>

Program.cs

using System.Reflection;

var assembly = Assembly.GetExecutingAssembly();
var informationalVersion = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;

Console.WriteLine(informationalVersion);

AssemblyInformationalVersion を取得するコードの説明は、こちらを参考にしてください。
[C#] AssemblyInfo アセンブリ情報やバージョンを取得する (.NET Core比較版)

git リポジトリがなければ、ハッシュは付与されません。

image

git リポジトリを作成してコミットします。その後にリビルドすると、ハッシュが付与されました。

image

ここで IncludeSourceRevisionInInformationalVersionfalse に設定してリビルドすると、2.0.0-beta.1 に戻ります。

感謝

2023-12-15 (金)