Freigeben über


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 ist true (der Standardwert ist), werden paketbezogene Projekteigenschaften in Assemblyattribute umgewandelt. In der folgenden Tabelle sind die Projekteigenschaften aufgeführt, die die Attribute generieren. Außerdem werden die Eigenschaften aufgelistet, mit denen Sie diese Generierung pro Attribut deaktivieren können, z. B.:

<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 sind standardmäßig auf den Wert von $(Version) ohne das Suffix gesetzt. Wenn $(Version)1.2.3-beta.4 ist, dann wäre der Wert 1.2.3.
  • InformationalVersion wird standardmäßig auf den Wert von $(Version) gesetzt.
  • Wenn die Eigenschaft $(SourceRevisionId) vorhanden ist, wird sie an InformationalVersion angefügt. Sie können dieses Verhalten mithilfe von IncludeSourceRevisionInInformationalVersion deaktivieren.
  • Copyright und Description Eigenschaften 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 sie über die --configuration Option von dotnet Befehlen festlegen, z. B. dotnet pack.
  • Einige der Eigenschaften werden beim Erstellen eines NuGet-Pakets verwendet. Weitere Informationen finden Sie unter "Paketeigenschaften".

Festlegen beliebiger Attribute

Es ist möglich, der generierten Datei auch eigene Assemblyattribute hinzuzufügen. Definieren Sie <AssemblyAttribute> dazu 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 System.Reflection.AssemblyMetadataAttribute-Attribut verfügt beispielsweise über einen Konstruktor, der zwei Zeichenfolgen entgegennimmt.

  • 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 AssemblyMetadataAttribute Sie 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.)

Wenn das Attribut andere Parametertypen aufweist als System.String, können Sie die Parameter mithilfe eines bestimmten Musters von XML-Elementen angeben, die von der MSBuild-Aufgabe WriteCodeFragment unterstützt werden. Siehe WriteCodeFragment-Aufgabe – Generieren von Attributen auf Assemblyebene.

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. Die Datei befindet sich in der Regel unter .\Properties\AssemblyInfo.cs oder .\Properties\AssemblyInfo.vb. Projekte im SDK-Stil generieren diese Datei jedoch auch basierend auf den Projekteinstellungen.

Führen Sie beim Portieren des Codes zu .NET 6 oder höher eine der folgenden Aktionen aus:

  • Deaktivieren Sie die Generierung der temporären Codedatei, die die Assembly-Info-Attribute enthält, indem Sie GenerateAssemblyInfo auf false in Ihrer Projektdatei setzen. Auf diese Weise 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 .