Поделиться через


Установка атрибутов сборки в файле проекта

Свойство MSBuild можно использовать для преобразования свойств проекта, связанных с пакетом , в атрибуты сборки в созданном файле кода. Кроме того, можно использовать элементы MSBuild для добавления произвольных атрибутов сборки в созданный файл.

Использование свойств пакета в качестве атрибутов сборки

Свойство GenerateAssemblyInfo MSBuild управляет AssemblyInfo созданием атрибутов для проекта. GenerateAssemblyInfo Если значение равно true (по умолчанию), свойства проекта, связанные с пакетом, преобразуются в атрибуты сборки. В следующей таблице перечислены свойства проекта, которые создают атрибуты. В нем также перечислены свойства, которые можно использовать для отключения этого поколения на основе каждого атрибута, например:

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
Свойство MSBuild Атрибут сборки Свойство для отключения генерации атрибутов
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

Примечания об этих параметрах:

  • AssemblyVersion и FileVersion по умолчанию принимают значение $(Version) без суффикса. Например, если $(Version) есть 1.2.3-beta.4, то значение будет 1.2.3.
  • InformationalVersion по умолчанию используется значение $(Version).
  • Если свойство $(SourceRevisionId) присутствует, оно добавляется к InformationalVersion. Это поведение можно отключить с помощью IncludeSourceRevisionInInformationalVersion.
  • Copyright и Description свойства также используются для метаданных NuGet.
  • Configuration, которое по умолчанию является Debug, используется совместно со всеми целями MSBuild. Его можно задать с помощью --configuration параметра dotnet команд, например dotnet pack.
  • Некоторые свойства используются при создании пакета NuGet. Дополнительные сведения см. в разделе "Свойства пакета".

Установка произвольных атрибутов

Кроме того, можно добавить собственные атрибуты сборки в созданный файл. Для этого определите <AssemblyAttribute> элементы MSBuild, указывающие пакету SDK, какой тип атрибута необходимо создать. Эти элементы также должны включать все параметры конструктора, необходимые для этого атрибута. Например, System.Reflection.AssemblyMetadataAttribute атрибут имеет конструктор, который принимает две строки:

  • Имя, описывающее произвольное значение.
  • Значение для хранения.

Если у вас есть Date свойство в MSBuild, содержащее дату создания сборки, можно использовать AssemblyMetadataAttribute для внедрения этой даты в атрибуты сборки с помощью следующего кода 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>

Этот элемент сообщает пакету SDK для .NET, чтобы вывести следующий C# (или эквивалент F# или Visual Basic) в качестве атрибута уровня сборки:

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

(Фактическая строка даты будет такой, какую вы указали во время сборки.)

Если атрибут имеет типы параметров, отличные от System.String, можно указать параметры с помощью определенного шаблона XML-элементов, поддерживаемых задачей MSBuild WriteCodeFragment. См. задачу WriteCodeFragment — создание атрибутов уровня сборки.

Переход с .NET Framework

При переносе проекта .NET Framework в .NET 6 или более поздней версии может возникнуть ошибка, связанная с повторяющимися файлами сведений о сборке. Это связано с тем, что шаблоны проектов .NET Framework создают файл кода с набором атрибутов сведений о сборке. Файл обычно находится в папке .\Properties\AssemblyInfo.cs или .\Properties\AssemblyInfo.vb. Однако проекты в стиле SDK также создают этот файл на основе параметров проекта.

При переносе кода в .NET 6 или более поздней версии выполните одно из следующих действий:

  • Отключите создание временного файла кода, содержащего атрибуты сведений о сборке, задав значение GenerateAssemblyInfofalse в файле проекта. Это позволяет сохранить файл AssemblyInfo .
  • Перенесите параметры в файле AssemblyInfo в файл проекта, а затем удалите файл AssemblyInfo .