Delen via


Assemblykenmerken instellen in een projectbestand

U kunt een MSBuild-eigenschap gebruiken om pakketgerelateerde projecteigenschappen te transformeren naar assemblykenmerken in een gegenereerd codebestand. Verder kunt u MSBuild-items gebruiken om willekeurige assemblykenmerken toe te voegen aan het gegenereerde bestand.

Pakketeigenschappen gebruiken als assemblykenmerken

De GenerateAssemblyInfo eigenschap MSBuild bepaalt AssemblyInfo het genereren van kenmerken voor een project. Wanneer de waarde (de standaardinstelling GenerateAssemblyInfo ) is true , worden pakketgerelateerde projecteigenschappen omgezet in assemblykenmerken. De volgende tabel bevat de projecteigenschappen waarmee de kenmerken worden gegenereerd. Er worden ook de eigenschappen weergegeven die u kunt gebruiken om deze generatie per kenmerk uit te schakelen, bijvoorbeeld:

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
MSBuild-eigenschap Assembly-kenmerk Eigenschap voor het uitschakelen van kenmerkgeneratie
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

Opmerkingen over deze instellingen:

  • AssemblyVersion en FileVersion de standaardwaarde van $(Version) zonder achtervoegsel. Als dat het zo is1.2.3-beta.4, $(Version) is 1.2.3de waarde bijvoorbeeld .
  • InformationalVersion is standaard ingesteld op de waarde van $(Version).
  • Als de $(SourceRevisionId) eigenschap aanwezig is, wordt deze toegevoegd aan InformationalVersion. U kunt dit gedrag uitschakelen met behulp van IncludeSourceRevisionInInformationalVersion.
  • Copyright en Description eigenschappen worden ook gebruikt voor NuGet-metagegevens.
  • Configuration, dat standaard Debugwordt gebruikt , wordt gedeeld met alle MSBuild-doelen. U kunt deze instellen via de --configuration optie van dotnet opdrachten, bijvoorbeeld dotnet pack.
  • Sommige eigenschappen worden gebruikt bij het maken van een NuGet-pakket. Zie Pakketeigenschappen voor meer informatie.

Willekeurige kenmerken instellen

Het is ook mogelijk om uw eigen assemblykenmerken toe te voegen aan het gegenereerde bestand. Hiervoor definieert u <AssemblyAttribute> MSBuild-items die de SDK vertellen welk type kenmerk moet worden gemaakt. Deze items moeten ook eventuele constructorparameters bevatten die vereist zijn voor dat kenmerk. Het kenmerk heeft bijvoorbeeld System.Reflection.AssemblyMetadataAttribute een constructor die twee tekenreeksen gebruikt:

  • Een naam om een willekeurige waarde te beschrijven.
  • De waarde die moet worden opgeslagen.

Als u een Date eigenschap in MSBuild had die de datum bevatte waarop een assembly werd gemaakt, kunt u die datum insluiten AssemblyMetadataAttribute in de assemblykenmerken met behulp van de volgende MSBuild-code:

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

Dit item geeft aan dat de .NET SDK de volgende C# (of equivalente F# of Visual Basic) als een kenmerk op assemblyniveau verzendt:

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

(De werkelijke datumtekenreeks is wat u hebt opgegeven op het moment van de build.)

Als het kenmerk andere parametertypen heeft dan System.String, kunt u de parameters opgeven met behulp van een bepaald patroon van XML-elementen die worden ondersteund door de MSBuild-taak WriteCodeFragment . Zie de taak WriteCodeFragment - Kenmerken op assemblyniveau genereren.

Migreren van .NET Framework

Als u uw .NET Framework-project migreert naar .NET 6 of hoger, kan er een fout optreden met betrekking tot dubbele assemblygegevensbestanden. Dat komt doordat .NET Framework-projectsjablonen een codebestand maken met set assembly-infokenmerken. Het bestand bevindt zich meestal op .\Properties\AssemblyInfo.cs of .\Properties\AssemblyInfo.vb. Met SDK-projecten wordt dit bestand echter ook voor u gegenereerd op basis van de projectinstellingen.

Voer een van de volgende handelingen uit bij het overzetten van uw code naar .NET 6 of hoger:

  • Schakel het genereren van het tijdelijke codebestand met de kenmerken van de assembly-info uit door deze in te stellen GenerateAssemblyInfofalse in het projectbestand. Hierdoor kunt u het AssemblyInfo-bestand behouden.
  • Migreer de instellingen in het AssemblyInfo-bestand naar het projectbestand en verwijder het AssemblyInfo-bestand .