Impostare gli attributi dell'assembly in un file di progetto

È possibile usare una proprietà di 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 di MSBuild controlla la generazione di attributi AssemblyInfo per un progetto. Quando il valore GenerateAssemblyInfo è true (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 a singoli attributi, 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 su queste impostazioni:

  • AssemblyVersion e FileVersion usano il valore predefinito $(Version) senza il suffisso. Se ad esempio $(Version) è 1.2.3-beta.4, il valore sarà 1.2.3.
  • Il valore predefinito di InformationalVersion è $(Version).
  • Se la proprietà $(SourceRevisionId) è presente, viene accodata a InformationalVersion. Questo comportamento può essere disabilitato con IncludeSourceRevisionInInformationalVersion.
  • Le proprietà Copyright e Description vengono usate anche per i metadati NuGet.
  • Configuration, che usa il valore predefinito Debug, è condiviso con tutte le destinazioni di MSBuild. È possibile impostarlo tramite l'opzione --configuration dei comandi dotnet, 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 elementi <AssemblyAttribute> 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 è presente una proprietà Date in MSBuild che contiene 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 equivalente per F# o Visual Basic) 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 determinato schema di elementi XML supportato dall'attività WriteCodeFragment di MSBuild. Vedere 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 problema è dovuto al fatto che i modelli di progetto .NET Framework creano un file di codice con attributi impostati per le informazioni sull'assembly. 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 trasferisce il 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.