プロジェクト ファイルにアセンブリ属性を設定する

MSBuild プロパティを使うと、生成されたコード ファイル内のアセンブリ属性にパッケージ関連のプロジェクト プロパティを変換できます。 さらに、MSBuild 項目を使って、生成されたファイルに任意のアセンブリ属性を追加できます。

パッケージのプロパティをアセンブリ属性として使う

GenerateAssemblyInfo MSBuild プロパティは、プロジェクトの AssemblyInfo 属性の生成を制御します。 GenerateAssemblyInfo 値が true (既定) の場合、パッケージ関連のプロジェクト プロパティはアセンブリ属性に変換されます。 属性を生成するプロジェクト プロパティの一覧を次の表に示します。 また、次のように、属性ごとにその生成を無効にするために使用できるプロパティの一覧も示しています。

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
MSBuild のプロパティ Assembly 属性 属性の生成を無効にするプロパティ
Company AssemblyCompanyAttribute GenerateAssemblyCompanyAttribute
Configuration AssemblyConfigurationAttribute GenerateAssemblyConfigurationAttribute
Copyright AssemblyCopyrightAttribute GenerateAssemblyCopyrightAttribute
Description AssemblyDescriptionAttribute GenerateAssemblyDescriptionAttribute
FileVersion AssemblyFileVersionAttribute GenerateAssemblyFileVersionAttribute
InformationalVersion AssemblyInformationalVersionAttribute GenerateAssemblyInformationalVersionAttribute
Product AssemblyProductAttribute GenerateAssemblyProductAttribute
AssemblyTitle AssemblyTitleAttribute GenerateAssemblyTitleAttribute
AssemblyVersion AssemblyVersionAttribute GenerateAssemblyVersionAttribute
NeutralLanguage NeutralResourcesLanguageAttribute GenerateNeutralResourcesLanguageAttribute

これらの設定に関する注意事項:

  • AssemblyVersionFileVersion の既定値は、サフィックスのない $(Version) の値です。 たとえば、$(Version)1.2.3-beta.4 の場合、値は 1.2.3 です。
  • InformationalVersion の既定値は、$(Version) の値です。
  • $(SourceRevisionId) プロパティが存在する場合は、それが InformationalVersion の後に追加されます。 IncludeSourceRevisionInInformationalVersion を使用して、この動作を無効にすることができます。
  • NuGet メタデータには、Copyright および Description プロパティも使用されます。
  • Configuration (既定値は Debug) は、すべての MSBuild ターゲットと共有されます。 これは、dotnet コマンド (dotnet pack など) の --configuration オプションを使用して設定できます。
  • 一部のプロパティは、NuGet パッケージを作成するときに使用されます。 詳細については、「パッケージのプロパティ」を参照してください。

任意の属性を設定する

生成されたファイルに独自のアセンブリ属性を追加することもできます。 これを行うには、作成する属性の種類を SDK に指示する <AssemblyAttribute> MSBuild 項目を定義します。 これらの項目には、その属性に必要なコンストラクター パラメーターも含める必要があります。 たとえば、System.Reflection.AssemblyMetadataAttribute 属性には 2 つの文字列を取るコンストラクターがあります。

  • 任意の値を説明する名前。
  • 格納する値。

アセンブリが作成された日付を含む MSBuild の Date プロパティがある場合は、次の MSBuild コードで、AssemblyMetadataAttribute を使ってその日付をアセンブリ属性に埋め込むことができます。

<ItemGroup>
  <!-- Include must be the fully qualified .NET type name of the Attribute to create. -->
  <AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
    <!-- _Parameter1, _Parameter2, etc. correspond to the
        matching parameter of a constructor of that .NET attribute type -->
    <_Parameter1>BuildDate</_Parameter1>
    <_Parameter2>$(Date)</_Parameter2>
  </AssemblyAttribute>
</ItemGroup>

この項目は、次の C# (または同等の F# または Visual Basic) をアセンブリ レベルの属性として出力するように .NET SDK に指示します。

[assembly: System.Reflection.AssemblyMetadataAttribute("BuildDate", "01/19/2024")]

(実際の日付文字列は、ビルド時に指定したものになります。)

属性に System.String 以外のパラメーター型がある場合、MSBuild WriteCodeFragment タスクによってサポートされている XML 要素の特定のパターンを利用することでパラメーターを指定できます。 「WriteCodeFragment タスク」ページの「アセンブリ レベルの属性を生成する」セクションを参照してください。

.NET Framework からの移行

.NET Framework プロジェクトを .NET 6 以降に移行すると、アセンブリ情報ファイルの重複に関連するエラーが発生する可能性があります。 これは、.NET Framework プロジェクト テンプレートでは、アセンブリ情報属性の設定されたコード ファイルが作成されるためです。 通常、このファイルは .\Properties\AssemblyInfo.cs または .\Properties\AssemblyInfo.vb にあります。 ただし、SDK スタイルのプロジェクトでも、プロジェクトの設定に基づいてこのファイルが "生成" されます。

コードを .NET 6 以降に移植する場合は、次のいずれかの操作を行います:

  • プロジェクト ファイルで GenerateAssemblyInfofalse に設定することにより、アセンブリ情報属性を含む一時コード ファイルの生成を無効にします。 これにより、AssemblyInfo ファイルを保持することができます。
  • AssemblyInfo ファイルの設定をプロジェクト ファイルに移行してから、AssemblyInfo ファイルを削除します。