Condividi tramite


Impostare gli attributi dell'assembly in un file di progetto

È possibile usare una proprietà MSBuild per trasformare le proprietà del progetto correlate al pacchetto in attributi di assembly in un file di codice generato. Inoltre, è possibile usare gli elementi MSBuild per aggiungere attributi di assembly arbitrari al file generato.

Usare le proprietà del pacchetto come attributi dell'assembly

La proprietà GenerateAssemblyInfo MSBuild controlla la generazione degli attributi per un progetto. Quando il GenerateAssemblyInfo valore è true (ovvero l'impostazione predefinita), le proprietà del progetto correlate al pacchetto vengono trasformate in attributi di assembly. Nella tabella seguente sono elencate le proprietà del progetto che generano gli attributi. Vengono inoltre elencate le proprietà che è possibile usare per disabilitare tale generazione in base all'attributo, ad esempio:

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
Proprietà MSBuild Attributo assembly Proprietà per disabilitare la generazione di attributi
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

Note sulle impostazioni seguenti:

  • AssemblyVersion e FileVersion predefiniscono al valore di $(Version) senza il suffisso. Ad esempio, se $(Version) è 1.2.3-beta.4, il valore sarà 1.2.3.
  • InformationalVersion ha come valore predefinito $(Version).
  • Se la $(SourceRevisionId) proprietà è presente, viene aggiunta a InformationalVersion. È possibile disabilitare questo comportamento usando IncludeSourceRevisionInInformationalVersion.
  • Copyright e Description le proprietà vengono usate anche per i metadati NuGet.
  • Configuration, che per impostazione predefinita è Debug, viene condiviso con tutti i target MSBuild. È possibile impostarlo tramite l'opzione --configuration dei dotnet comandi, ad esempio dotnet pack.
  • Alcune delle proprietà vengono usate durante la creazione di un pacchetto NuGet. Per altre informazioni, vedere Proprietà del pacchetto.

Impostare attributi arbitrari

È anche possibile aggiungere attributi di assembly personalizzati al file generato. A tale scopo, definire <AssemblyAttribute> gli elementi di MSBuild che indicano all'SDK il tipo di attributo da creare. Questi elementi devono includere anche tutti i parametri del costruttore necessari per tale attributo. Ad esempio, l'attributo System.Reflection.AssemblyMetadataAttribute ha un costruttore che accetta due stringhe:

  • Nome per descrivere un valore arbitrario.
  • Valore da archiviare.

Se si dispone di una Date proprietà in MSBuild contenente la data di creazione di un assembly, è possibile usare AssemblyMetadataAttribute per incorporare tale data negli attributi dell'assembly usando il codice MSBuild seguente:

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

Questo elemento indica a .NET SDK di generare il codice C# seguente (o F# o Visual Basic equivalente) come attributo a livello di assembly:

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

La stringa di data effettiva sarà quella specificata al momento della compilazione.

Se l'attributo ha tipi di parametro diversi da System.String, è possibile specificare i parametri usando un modello specifico di elementi XML supportati dall'attività MSBuild WriteCodeFragment . Vedi attività WriteCodeFragment - Generare attributi a livello di assembly.

Eseguire la migrazione da .NET Framework

Se si esegue la migrazione del progetto .NET Framework a .NET 6 o versione successiva, potrebbe verificarsi un errore correlato ai file di informazioni sull'assembly duplicati. Questo perché i modelli di progetto .NET Framework creano un file di codice con attributi delle informazioni sull'assembly impostati. Il file si trova in genere in .\Properties\AssemblyInfo.cs o .\Properties\AssemblyInfo.vb. Tuttavia, anche i progetti in stile SDK generano questo file in base alle impostazioni del progetto.

Quando si esegue la conversione del codice in .NET 6 o versione successiva, eseguire una delle operazioni seguenti:

  • Disabilitare la generazione del file di codice temporaneo che contiene gli attributi delle informazioni sull'assembly impostando GenerateAssemblyInfo su false nel file di progetto. In questo modo è possibile mantenere il file AssemblyInfo .
  • Eseguire la migrazione delle impostazioni nel file AssemblyInfo al file di progetto e quindi eliminare il file AssemblyInfo .