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 y FileVersion tienen como valor predeterminado el valor de $(Version) sin el sufijo. Por ejemplo, si $(Version) es 1.2.3-beta.4, entonces el valor sería 1.2.3.
  • El valor predeterminado de InformationalVersion es el de $(Version).
  • Si la propiedad $(SourceRevisionId) está presente, se anexa a InformationalVersion. Puede deshabilitar este comportamiento mediante IncludeSourceRevisionInInformationalVersion.
  • Las propiedades Copyright y Description también se utilizan para metadatos de NuGet.
  • Configuration, que tiene Debug como valor predeterminado, se comparte con todos los destinos de MSBuild. Se puede establecer con la opción --configuration de los comandos dotnet; 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).

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 en false 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.