プロジェクト ファイルにアセンブリ属性を設定する
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 |
これらの設定に関する注意事項:
AssemblyVersion
とFileVersion
の既定値は、サフィックスのない$(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 以降に移植する場合は、次のいずれかの操作を行います:
- プロジェクト ファイルで
GenerateAssemblyInfo
をfalse
に設定することにより、アセンブリ情報属性を含む一時コード ファイルの生成を無効にします。 これにより、AssemblyInfo ファイルを保持することができます。 - AssemblyInfo ファイルの設定をプロジェクト ファイルに移行してから、AssemblyInfo ファイルを削除します。
.NET