Partilhar via


Definir atributos de assembly em um arquivo de projeto

Você pode usar uma propriedade MSBuild para transformar propriedades de projeto relacionadas ao pacote 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 de pacote como atributos de assembly

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

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
Propriedade MSBuild Atributo Assembly Propriedade para desativar a geração 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 estas definições:

  • AssemblyVersion e FileVersion padrão para o valor de $(Version) sem o sufixo. Por exemplo, se $(Version) é 1.2.3-beta.4, então o valor seria 1.2.3.
  • InformationalVersion o padrão é o valor de $(Version).
  • Se a $(SourceRevisionId) propriedade estiver presente, ela será anexada ao InformationalVersion. Você pode desativar esse comportamento usando IncludeSourceRevisionInInformationalVersiono .
  • Copyright e Description as propriedades 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 através da --configuration opção de dotnet comandos, por exemplo, dotnet pack.
  • Algumas das propriedades são usadas ao criar um pacote NuGet. Para obter mais informações, consulte Propriedades do pacote.

Definir atributos arbitrários

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

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

Se você tinha uma Date propriedade no MSBuild que continha a data em que um assembly foi criado, você poderia usar AssemblyMetadataAttribute para incorporar 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 equivalente F# ou Visual Basic) como um atributo de nível de assembly:

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

(A cadeia de caracteres de data real seria o que você forneceu no momento da compilação.)

Se o atributo tiver tipos de parâmetros diferentes do System.String, você poderá especificar os parâmetros usando um padrão específico de elementos XML suportados pela tarefa MSBuild WriteCodeFragment . Consulte Tarefa WriteCodeFragment - Gerar atributos de nível de assembly.

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 ocorre porque os modelos de projeto do .NET Framework criam um arquivo de código com atributos de informações de assembly definidos. O arquivo normalmente está localizado em .\Properties\AssemblyInfo.cs ou .\Properties\AssemblyInfo.vb. No entanto, projetos no estilo SDK também geram esse arquivo para você com base nas configurações do projeto.

Ao portar seu código para o .NET 6 ou posterior, siga um destes procedimentos:

  • Desative a geração do arquivo de código temporário que contém os atributos assembly info definindo GenerateAssemblyInfo como false no arquivo de projeto. Isso permite que você mantenha seu arquivo AssemblyInfo .
  • Migre as configurações no arquivo AssemblyInfo para o arquivo de projeto e, em seguida, exclua o arquivo AssemblyInfo.