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


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

Свойство 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 или более поздней версии выполните одно из следующих действий:

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