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
eFileVersion
padrão para o valor de$(Version)
sem o sufixo. Por exemplo, se$(Version)
é1.2.3-beta.4
, então o valor seria1.2.3
.InformationalVersion
o padrão é o valor de$(Version)
.- Se a
$(SourceRevisionId)
propriedade estiver presente, ela será anexada aoInformationalVersion
. Você pode desativar esse comportamento usandoIncludeSourceRevisionInInformationalVersion
o . Copyright
eDescription
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 dedotnet
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
comofalse
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.