Установка атрибутов сборки в файле проекта
Свойство 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.