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
を使用して無効にすることができます。 -
Copyright
プロパティとDescription
プロパティは、NuGet メタデータにも使用されます。 -
Configuration
は既定でDebug
に設定され、すべての MSBuild ターゲットと共有されます。 これは、dotnet
コマンドの--configuration
オプション (dotnet pack など) を使用して設定できます。 - 一部のプロパティは、NuGet パッケージの作成時に使用されます。 詳細については、「 パッケージのプロパティ」を参照してください。
任意の属性を設定する
生成されたファイルに独自のアセンブリ属性を追加することもできます。 これを行うには、作成する属性 <AssemblyAttribute>
種類を SDK に指示する MSBuild 項目を定義します。 これらの項目には、その属性に必要なコンストラクター パラメーターも含める必要があります。 たとえば、 System.Reflection.AssemblyMetadataAttribute 属性には、次の 2 つの文字列を受け取るコンストラクターがあります。
- 任意の値を記述する名前。
- 格納する値。
アセンブリが作成された日付を含む Date
プロパティが MSBuild にある場合は、次の 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