Establecimiento de atributos de ensamblado en un archivo de proyecto
Puede usar una propiedad de MSBuild para transformar las propiedades del proyecto relacionadas con el paquete en atributos de ensamblado de un archivo de código generado. Además, puede usar elementos de MSBuild para agregar atributos de ensamblado arbitrarios al archivo generado.
Uso de propiedades de paquete como atributos de ensamblado
La propiedad GenerateAssemblyInfo
de MSBuild controla la generación de atributos AssemblyInfo
de un proyecto. Cuando el valor de GenerateAssemblyInfo
es true
(el predeterminado), las propiedades del proyecto relacionadas con el paquete se transforman en atributos de ensamblado. En la siguiente tabla se enumeran las propiedades del proyecto que generan los atributos. También se enumeran las propiedades que puede usar para deshabilitar esa generación por atributo, por ejemplo:
<PropertyGroup>
<GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
Propiedad de MSBuild | Atributo de ensamblado | Propiedad para deshabilitar la generación de atributos |
---|---|---|
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 |
Notas sobre dichos valores de configuración:
AssemblyVersion
yFileVersion
tienen como valor predeterminado el valor de$(Version)
sin el sufijo. Por ejemplo, si$(Version)
es1.2.3-beta.4
, entonces el valor sería1.2.3
.- El valor predeterminado de
InformationalVersion
es el de$(Version)
. - Si la propiedad
$(SourceRevisionId)
está presente, se anexa aInformationalVersion
. Puede deshabilitar este comportamiento medianteIncludeSourceRevisionInInformationalVersion
. - Las propiedades
Copyright
yDescription
también se utilizan para metadatos de NuGet. Configuration
, que tieneDebug
como valor predeterminado, se comparte con todos los destinos de MSBuild. Se puede establecer con la opción--configuration
de los comandosdotnet
; por ejemplo, dotnet pack.- Algunas de las propiedades se usan al crear un paquete NuGet. Para obtener más información, consulte Propiedades del paquete.
Establecimiento de atributos arbitrarios
También es posible agregar sus propios atributos de ensamblado al archivo generado. Para ello, defina elementos <AssemblyAttribute>
de MSBuild que indiquen al SDK qué tipo de atributo crear. Estos elementos también deben incluir los parámetros de constructor necesarios para ese atributo. Por ejemplo, el atributo System.Reflection.AssemblyMetadataAttribute tiene un constructor que toma dos cadenas:
- Nombre para describir un valor arbitrario.
- Valor que se va a almacenar.
Si tenía una propiedad Date
en MSBuild que contenía la fecha de cuando se creó un ensamblado, podría usar AssemblyMetadataAttribute
para insertar esa fecha en los atributos de ensamblado mediante el siguiente código de MSBuild:
<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>
Este elemento indica al SDK de .NET que emita el siguiente código de C# (o de F# o de Visual Basic equivalente) como atributo de nivel de ensamblado:
[assembly: System.Reflection.AssemblyMetadataAttribute("BuildDate", "01/19/2024")]
(La cadena de fecha real sería la que proporcionó en tiempo de compilación).
Si el atributo tiene tipos de parámetro distintos de System.String
, puede especificar los parámetros mediante un patrón determinado de elementos XML admitidos por la tarea MSBuild WriteCodeFragment
. Consulte la Tarea WriteCodeFragment: generación de atributos de nivel de ensamblado.
Migración desde .NET Framework
Si migra el proyecto de .NET Framework a .NET 6 o posterior, es posible que encuentre un error relacionado con archivos de información de ensamblado duplicados. Esto se debe a que las plantillas de proyectos de .NET Framework crean un archivo de código con estos atributos de información de ensamblado definidos. Normalmente, el archivo se encuentra en .\Properties\AssemblyInfo.cs o .\Properties\AssemblyInfo.vb. Sin embargo, los proyectos de estilo SDK también generan este archivo para usted de acuerdo con la configuración del proyecto.
Al portar el código a .NET 6 o posterior, realice una de las acciones siguientes:
- Deshabilite la generación del archivo de código temporal que contiene los tributos de información de ensamblado. Para ello, establezca
GenerateAssemblyInfo
enfalse
en el archivo del proyecto. Esto le permite conservar el archivo AssemblyInfo. - Migre la configuración del archivo AssemblyInfo al archivo del proyecto y elimine el archivo AssemblyInfo.