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
eFileVersion
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 aInformationalVersion
. Questo comportamento può essere disabilitato conIncludeSourceRevisionInInformationalVersion
. - Le proprietà
Copyright
eDescription
vengono usate anche per i metadati NuGet. Configuration
, che usa il valore predefinitoDebug
, è condiviso con tutte le destinazioni di MSBuild. È possibile impostarlo tramite l'opzione--configuration
dei comandidotnet
, 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
sufalse
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.