次の方法で共有


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

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 ファイルを削除します。