Festlegen von Assemblyattributen in einer Projektdatei

Sie können eine MSBuild-Eigenschaft verwenden, um paketbezogene Projekteigenschaften in Assemblyattribute in einer generierten Codedatei zu transformieren. Darüber hinaus können Sie MSBuild-Elemente verwenden, um der generierten Datei beliebige Assemblyattribute hinzuzufügen.

Verwenden von Paketeigenschaften als Assemblyattribute

Die GenerateAssemblyInfo MSBuild-Eigenschaft steuert die AssemblyInfo-Attributgenerierung für ein Projekt. Wenn der GenerateAssemblyInfo-Wert true (was der Standardwert ist) lautet, werden paketbezogene Projekteigenschaften in Assemblyattribute umgewandelt. In der folgenden Tabelle sind die Projekteigenschaften aufgelistet, mit denen die Attribute generiert werden. Außerdem sind die Eigenschaften aufgelistet, mit denen Sie diese Generierung auf Attributbasis deaktivieren können, z. B. folgendermaßen:

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
MSBuild-Eigenschaft Assembly-Attribut Eigenschaft zum Deaktivieren der Attributgenerierung
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

Hinweise zu diesen Einstellungen:

  • AssemblyVersion und FileVersion nehmen standardmäßig den Wert von $(Version) ohne Suffix an. Wenn $(Version) beispielsweise 1.2.3-beta.4 ist, wäre der Wert 1.2.3.
  • InformationalVersion hat standardmäßig den Wert von $(Version).
  • Wenn die Eigenschaft $(SourceRevisionId) vorhanden ist, wird sie an InformationalVersion angefügt. Sie können dieses Verhalten mithilfe von IncludeSourceRevisionInInformationalVersion deaktivieren.
  • Die Eigenschaften Copyright und Description werden auch für NuGet-Metadaten verwendet.
  • Configuration weist standardmäßig den Wert Debug auf und wird für alle MSBuild-Ziele freigegeben. Sie können die Eigenschaft über die Option --configuration in dotnet-Befehlen wie dotnet pack festlegen.
  • Einige dieser Eigenschaften werden bei der Erstellung eines NuGet-Pakets verwendet. Weitere Informationen finden Sie unter Paketeigenschaften.

Beliebige Attribute festlegen

Es ist möglich, der generierten Datei auch eigene Assemblyattribute hinzuzufügen. Definieren Sie dazu <AssemblyAttribute>-MSBuild-Elemente, die dem SDK mitteilen, welcher Typ von Attribut erstellt werden soll. Diese Elemente sollten auch alle Konstruktorparameter enthalten, die für dieses Attribut erforderlich sind. Das Attribut System.Reflection.AssemblyMetadataAttribute verfügt beispielsweise über einen Konstruktor, der zwei Zeichenfolgen akzeptiert:

  • Ein Name, der einen beliebigen Wert beschreibt.
  • Der zu speichernde Wert.

Wenn Sie eine Date-Eigenschaft in MSBuild hatten, die das Datum enthielt, an dem eine Assembly erstellt wurde, könnten Sie AssemblyMetadataAttribute verwenden, um dieses Datum mithilfe des folgenden MSBuild-Codes in die Assemblyattribute einbetten:

<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>

Dieses Element weist das .NET SDK an, den folgenden C# (oder gleichwertigen F# oder Visual Basic) als Attribut auf Assemblyebene auszugeben:

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

(Die tatsächliche Datumszeichenfolge wäre das, was Sie zum Zeitpunkt des Builds angegeben haben.)

Migration von .NET Framework

Wenn Sie Ihr .NET Framework-Projekt zu .NET 6 oder höher migrieren, tritt möglicherweise ein Fehler im Zusammenhang mit doppelten Assemblyinformationen auf. Das liegt daran, dass .NET Framework-Projektvorlagen eine Codedatei mit assembly-Infoattributen erstellen. Diese Datei wird in der Regel als .\Properties\AssemblyInfo.cs oder .\Properties\AssemblyInfo.vb gespeichert. Projekte im SDK-Stil generieren jedoch auch diese Datei basierend auf den Projekteinstellungen.

Wenn Sie Ihren Code zu .NET 6 oder höher portieren, sollten Sie einen der folgenden Schritte ausführen:

  • Deaktivieren Sie die Generierung der temporären Codedatei, die die Assemblyinformationsattribute enthält, indem Sie GenerateAssemblyInfo in Ihrer Projektdatei auf false festlegen. Dadurch können Sie die AssemblyInfo-Datei beibehalten.
  • Migrieren Sie die Einstellungen in der AssemblyInfo-Datei in die Projektdatei, und löschen Sie dann die AssemblyInfo-Datei.