Definir atributos de assembly em um arquivo de projeto

Você pode usar uma propriedade MSBuild para transformar propriedades de projeto relacionadas a pacotes em atributos de assembly em um arquivo de código gerado. Além disso, você pode usar itens do MSBuild para adicionar atributos de assembly arbitrários ao arquivo gerado.

Usar propriedades do pacote como atributos de assembly

A GenerateAssemblyInfo propriedade MSBuild controla a geração de atributos de AssemblyInfo para um projeto. Quando o valor de GenerateAssemblyInfo é true (o que é o padrão), as propriedades de projeto relacionadas ao pacote são transformadas em atributos de assembly. A tabela a seguir lista as propriedades do projeto que geram os atributos. Ela também lista as propriedades que podem ser usadas para desabilitar essa geração por atributo, por exemplo:

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
Propriedade do MSBuild Atributo de assembly Propriedade para desabilitar a geração de atributo
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

Anotações sobre essas configurações:

  • AssemblyVersion e FileVersion tem o valor padrão de $(Version) sem o sufixo. Por exemplo, se $(Version) fosse 1.2.3-beta.4, então o valor seria 1.2.3.
  • InformationalVersion usa por padrão o valor de $(Version).
  • Se a propriedade $(SourceRevisionId) estiver presente, ela será adicionada a InformationalVersion. É possível desabilitar esse comportamento usando IncludeSourceRevisionInInformationalVersion.
  • As propriedades Copyright e Description também são usadas para metadados do NuGet.
  • Configuration, cujo padrão é Debug, é compartilhado com todos os destinos do MSBuild. Você pode defini-lo por meio da opção --configuration de comandos dotnet, por exemplo, pacote dotnet.
  • Algumas das propriedades são usadas ao criar um pacote NuGet. Para saber mais, confira Restauração de pacote.

Configurar atributos arbitrários

Também é possível adicionar seus próprios atributos de assembly ao arquivo gerado. Para fazer isso, defina itens do MSBuild de <AssemblyAttribute> que informam ao SDK que tipo de atributo criar. Esses itens também devem incluir todos os parâmetros de construtor necessários para esse atributo. Por exemplo, o atributo System.Reflection.AssemblyMetadataAttribute tem um construtor que usa duas cadeias de caracteres:

  • Um nome para descrever um valor arbitrário.
  • O valor a ser armazenado.

Se você tivesse uma propriedade Date no MSBuild que contivesse a data em que um assembly foi criado, você poderia usar AssemblyMetadataAttribute para inserir essa data nos atributos de assembly usando o seguinte código 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 item informa ao SDK do .NET para emitir o seguinte C# (ou F# equivalente ou Visual Basic) como um atributo no nível do assembly:

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

(A cadeia de caracteres de data real seria o que você forneceu no momento do build.)

Migrar do .NET Framework

Se você migrar seu projeto do .NET Framework para o.NET 6 ou posterior, poderá encontrar um erro relacionado a arquivos de informações de assembly duplicados. Isso acontece porque modelos de projeto do .NET Framework criam um arquivo de código com atributos de informações de assembly definidos. O arquivo está normalmente localizado em .\Properties\AssemblyInfo.cs ou .\Properties\AssemblyInfo.vb. Projetos no estilo SDK geram esse arquivo para você com base nas configurações do projeto.

Ao fazer a portabilidade do seu código para o .NET 6 ou posterior, siga um destes procedimentos:

  • Desabilite a geração do arquivo de código temporário que contém os atributos de informações do assembly definindo GenerateAssemblyInfo para false no arquivo de projeto. Isso permite manter o seu arquivo AssemblyInfo.
  • Migre as configurações no arquivo AssemblyInfo para o arquivo de projeto e exclua o arquivo AssemblyInfo.