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
undFileVersion
nehmen standardmäßig den Wert von$(Version)
ohne Suffix an. Wenn$(Version)
beispielsweise1.2.3-beta.4
ist, wäre der Wert1.2.3
.InformationalVersion
hat standardmäßig den Wert von$(Version)
.- Wenn die Eigenschaft
$(SourceRevisionId)
vorhanden ist, wird sie anInformationalVersion
angefügt. Sie können dieses Verhalten mithilfe vonIncludeSourceRevisionInInformationalVersion
deaktivieren. - Die Eigenschaften
Copyright
undDescription
werden auch für NuGet-Metadaten verwendet. Configuration
weist standardmäßig den WertDebug
auf und wird für alle MSBuild-Ziele freigegeben. Sie können die Eigenschaft über die Option--configuration
indotnet
-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.)
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. 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 auffalse
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.