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
eFileVersion
tem o valor padrão de$(Version)
sem o sufixo. Por exemplo, se$(Version)
fosse1.2.3-beta.4
, então o valor seria1.2.3
.InformationalVersion
usa por padrão o valor de$(Version)
.- Se a propriedade
$(SourceRevisionId)
estiver presente, ela será adicionada aInformationalVersion
. É possível desabilitar esse comportamento usandoIncludeSourceRevisionInInformationalVersion
. - As propriedades
Copyright
eDescription
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 comandosdotnet
, 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.)
Se o atributo tiver tipos de parâmetro diferentes de System.String
, você poderá especificar os parâmetros usando um padrão específico de elementos XML compatíveis com a tarefa WriteCodeFragment
MSBuild. Consulte Tarefa WriteCodeFragment – Gerar atributos no nível do 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 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
parafalse
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.