Справочник по MSBuild для проектов пакета SDK для .NET

Эта страница содержит справочные сведения о свойствах и элементах MSBuild, которые вы можете использовать для настройки проектов .NET.

Примечание.

Работа над этой страницей еще не завершена, поэтому здесь приведены лишь некоторые полезные свойства MSBuild для пакета SDK для .NET. Список стандартных свойств см. в статье Общие свойства MSBuild.

Свойства проверки сборки

Эти свойства и элементы передаются в ValidateAssemblies задачу. Дополнительные сведения о проверке сборки см. в разделе "Проверка сборки".

В этом разделе описаны следующие свойства MSBuild:

Примечание.

Эти свойства не являются частью пакета SDK для .NET (пока). Чтобы использовать их, необходимо также добавить в PackageReferenceзадачу Microsoft.DotNet.ApiCompat.Task.

Кроме того, следующие свойства, описанные в свойствах проверки пакета, также применяются к проверке сборки:

ApiCompatStrictMode

Если задано значениеtrue, ApiCompatStrictMode свойство указывает, что проверка совместимости API должны выполняться в строгом режиме.

<PropertyGroup>
  <ApiCompatStrictMode>true</ApiCompatStrictMode>
</PropertyGroup>

ApiCompatValidateAssemblies

Свойство ApiCompatValidateAssemblies включает ряд проверок для указанных сборок. Дополнительные сведения см. в разделе "Проверка сборки".

<PropertyGroup>
  <ApiCompatValidateAssemblies>true</ApiCompatValidateAssemblies>
</PropertyGroup>

Свойства платформы

В этом разделе описаны следующие свойства MSBuild:

TargetFramework

Свойство TargetFramework определяет версию целевой платформы для приложения. Список допустимых моникеров целевой платформы см. в статье Целевые платформы в проектах в стиле SDK.

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

Дополнительные сведения см.в статье Целевые платформы в проектах в стиле SDK.

TargetFrameworks

Используйте свойство TargetFrameworks, если приложение должно быть предназначено для нескольких платформ. Список допустимых моникеров целевой платформы см. в статье Целевые платформы в проектах в стиле SDK.

Примечание.

Это свойство игнорируется, если указано свойство TargetFramework (в единственном числе).

<PropertyGroup>
  <TargetFrameworks>net8.0;net462</TargetFrameworks>
</PropertyGroup>

Дополнительные сведения см.в статье Целевые платформы в проектах в стиле SDK.

NetStandardImplicitPackageVersion

Примечание.

Это свойство применяется только к проектам, использующим netstandard1.x. Он не применяется к проектам, использующим netstandard2.x.

Используйте свойство NetStandardImplicitPackageVersion, если вам нужно указать версию платформы ниже версии метапакета. Файл проекта, приведенный в следующем примере, предназначен для netstandard1.3, но использует NETStandard.Library версии 1.6.0.

<PropertyGroup>
  <TargetFramework>netstandard1.3</TargetFramework>
  <NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
</PropertyGroup>

Свойства атрибутов сборки

GenerateAssemblyInfo

Свойство AssemblyInfo управляет созданием атрибута GenerateAssemblyInfo для проекта. Значение по умолчанию — true. Используйте false, чтобы отключить создание файла:

<PropertyGroup>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

Параметр GeneratedAssemblyInfoFile определяет имя создаваемого файла.

Если значение GenerateAssemblyInfo равно true, связанные с пакетом свойства проекта преобразуются в атрибуты сборки.

Дополнительные сведения о создании атрибутов сборки с помощью файла проекта см. в разделе "Настройка атрибутов сборки" в файле проекта.

GeneratedAssemblyInfoFile

Свойство GeneratedAssemblyInfoFile определяет относительный или абсолютный путь к файлу сведений о созданной сборке. По умолчанию используется файл с именем [имя_проекта].AssemblyInfo.[cs|vb] в каталоге $(IntermediateOutputPath) (обычно это obj).

<PropertyGroup>
  <GeneratedAssemblyInfoFile>assemblyinfo.cs</GeneratedAssemblyInfoFile>
</PropertyGroup>

Свойства пакета

Описательные свойства

Для описания пакета, созданного из проекта, можно указать такие свойства, как PackageId, PackageVersion, PackageIcon, Title и Description. Дополнительные сведения об этих и других свойствах см. в разделе целевой объект пакета.

<PropertyGroup>
  ...
  <PackageId>ClassLibDotNetStandard</PackageId>
  <Version>1.0.0</Version>
  <Authors>John Doe</Authors>
  <Company>Contoso</Company>
</PropertyGroup>

PackRelease

Свойство PackRelease похоже на свойство PublishRelease, только оно изменяет поведение dotnet pack по умолчанию. Это свойство было введено в .NET 7.

<PropertyGroup>
  <PackRelease>true</PackRelease>
</PropertyGroup>

Примечание.

  • Начиная с пакета SDK для .NET 8 по PackRelease умолчанию true. Дополнительные сведения см. в разделе "Dotnet pack" с конфигурацией выпуска.
  • Только пакет SDK для .NET 7. Чтобы использовать PackRelease в проекте, который является частью решения Visual Studio, необходимо задать для переменной DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONStrue среды значение (или любое другое значение). Для решений, имеющих множество проектов, установка этой переменной увеличивает время, необходимое для упаковки.

Свойства проверки пакета

Эти свойства и элементы передаются в ValidatePackage задачу. Дополнительные сведения о проверке пакета см. в обзоре проверки пакетов.

Свойства задачи см. в разделе "Свойства проверки сборкиValidateAssemblies".

В этом разделе описаны следующие свойства и элементы MSBuild:

ApiCompatEnableRuleAttributesMustMatch

Если задано значениеtrue, ApiCompatEnableRuleAttributesMustMatch свойство включает правило проверки, которое проверка, если атрибуты соответствуют. Значение по умолчанию — false.

<PropertyGroup>
  <ApiCompatEnableRuleAttributesMustMatch>true</ApiCompatEnableRuleAttributesMustMatch>
</PropertyGroup>

ApiCompatEnableRuleCannotChangeParameterName

Если задано значениеtrue, ApiCompatEnableRuleCannotChangeParameterName свойство включает правило проверки, которое проверка, изменились ли имена параметров в общедоступных методах. Значение по умолчанию — false.

<PropertyGroup>
  <ApiCompatEnableRuleCannotChangeParameterName>true</ApiCompatEnableRuleCannotChangeParameterName>
</PropertyGroup>

ApiCompatExcludeAttributesFile

Элемент ApiCompatExcludeAttributesFile задает путь к файлу, который содержит атрибуты, которые следует исключить в формате DocId .

<ItemGroup>
  <ApiCompatExcludeAttributesFile Include="ApiCompatExcludedAttributes.txt" />
  <ApiCompatExcludeAttributesFile Include="ApiCompatBaselineExcludedAttributes.txt" />
</ItemGroup>

ApiCompatGenerateSuppressionFile

Свойство ApiCompatGenerateSuppressionFile указывает, следует ли создавать файл подавления совместимости.

<PropertyGroup>
  <ApiCompatGenerateSuppressionFile>true</ApiCompatGenerateSuppressionFile>
</PropertyGroup>

ApiCompatPermitUnnecesarySuppressions

Свойство ApiCompatPermitUnnecessarySuppressions указывает, следует ли разрешать ненужные подавления в файле подавления.

Значение по умолчанию — false.

<PropertyGroup>
  <ApiCompatPermitUnnecessarySuppressions>true</ApiCompatPermitUnnecessarySuppressions>
</PropertyGroup>

ApiCompatPreserveUnnecesarySuppressions

Свойство ApiCompatPreserveUnnecessarySuppressions указывает, следует ли сохранять ненужные подавления при повторном создании файла подавления. При повторном создании существующего файла подавления его содержимое считывается, десериализируется в набор подавления, а затем сохраняется в списке. Некоторые из подавлений могут больше не потребоваться, если несовместимость была исправлена. При сериализации подавления обратно на диск можно сохранить все существующие (десериализированные) выражения, задав для этого свойства значение true.

Значение по умолчанию — false.

<PropertyGroup>
  <ApiCompatPreserveUnnecessarySuppressions>true</ApiCompatPreserveUnnecessarySuppressions>
</PropertyGroup>

ApiCompatRespectInternals

Свойство ApiCompatRespectInternals указывает, следует ли internal проверка API для обеспечения совместимости в дополнение к public API.

<PropertyGroup>
  <ApiCompatRespectInternals>true</ApiCompatRespectInternals>
</PropertyGroup>

ApiCompatSuppressionFile

Элемент ApiCompatSuppressionFile задает путь к одному или нескольким файлам подавления для чтения. Если не указано, файл <подавления project-directory>/CompatibilitySuppressions.xml считывается (если он существует).

<ItemGroup>
  <ApiCompatSuppressionFile Include="CompatibilitySuppressions.xml;CompatibilitySuppressions.WasmThreads.xml" />
</ItemGroup>

ApiCompatSuppressionOutputFile

Свойство ApiCompatSuppressionOutputFile указывает путь к файлу подавления, в который записывается trueзапись.<ApiCompatGenerateSuppressionFile> Если не указано, используется первый ApiCompatSuppressionFile элемент.

EnablePackageValidation

Свойство EnablePackageValidation активирует ряд проверок пакета после задачи Pack. Дополнительные сведения см. в статье Проверка пакета.

<PropertyGroup>
  <EnablePackageValidation>true</EnablePackageValidation>
</PropertyGroup>

EnableStrictModeForBaselineValidation

Если задано значениеtrue, EnableStrictModeForBaselineValidation свойство включает строгий режим для базовых проверка пакетов. Значение по умолчанию — false.

EnableStrictModeForCompatibleFrameworksInPackage

Если задано значение true, EnableStrictModeForCompatibleFrameworksInPackage свойство включает строгий режим для сборок, совместимых с целевой платформой. Значение по умолчанию — false.

EnableStrictModeForCompatibleTfms

Если задано значение true, EnableStrictModeForCompatibleTfms свойство включает строгий режим для сборок контракта и реализации для всех совместимых целевых платформ. Значение по умолчанию — true.

NoWarn

Свойство NoWarn задает идентификаторы диагностики для подавления.

<PropertyGroup>
  <NoWarn>$(NoWarn);PKV0001</NoWarn>
</PropertyGroup>

PackageValidationBaselineFrameworkToIgnore

Элемент PackageValidationBaselineFrameworkToIgnore указывает целевую платформу для пропуска из базового пакета. Строка платформы должна точно соответствовать имени папки в базовом пакете.

<ItemGroup>
  <PackageValidationBaselineFrameworkToIgnore Include="netcoreapp2.1" />
</ItemGroup>

PackageValidationBaselineName

Свойство PackageValidationBaselineName указывает имя базового пакета для проверки текущего пакета. Если не указано, PackageId используется значение.

PackageValidationBaselineVersion

Свойство PackageValidationBaselineVersion указывает версию базового пакета для проверки текущего пакета.

PackageValidationReferencePath

Элемент PackageValidationReferencePath указывает путь к каталогу, в котором можно найти эталонную сборку на TFM.

<ItemGroup>
  <PackageValidationReferencePath Include="path/to/reference-assembly" TargetFramework="net7.0" />
</ItemGroup>

RoslynAssembliesPath

Свойство RoslynAssembliesPath указывает путь к каталогу, который содержит сборки Microsoft.CodeAnalysis, которые вы хотите использовать. Это свойство необходимо задать только в том случае, если вы хотите протестировать с помощью более нового компилятора, чем то, что находится в пакете SDK.

В этом разделе описаны следующие свойства MSBuild:

AppendTargetFrameworkToOutputPath

Свойство AppendTargetFrameworkToOutputPath определяет, добавляется ли моникер целевой платформы (TFM) к выходному пути (который определяется свойством OutputPath). Пакет SDK для .NET автоматически добавляет к выходному пути целевую платформу и идентификатор среды выполнения (если он есть). При установке значения false для свойства AppendTargetFrameworkToOutputPath TFM не добавляется к выходному пути. Однако при отсутствии TFM в выходном пути несколько артефактов сборки могут перезаписывать друг друга.

Например, при установке следующего параметра выходной путь для приложения .NET 5 изменяется с bin\Debug\net5.0 на bin\Debug:

<PropertyGroup>
  <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>

AppendRuntimeIdentifierToOutputPath

Свойство AppendRuntimeIdentifierToOutputPath определяет, добавляется ли к выходному пути идентификатор среды выполнения (RID). Пакет SDK для .NET автоматически добавляет к выходному пути целевую платформу и идентификатор среды выполнения (если он есть). При установке значения false для свойства AppendRuntimeIdentifierToOutputPath RID не добавляется к выходному пути.

Например, для приложения .NET 5 и RID win-x64следующего параметра изменяется выходной путь с bin\Debug\net5.0\win-x64bin\Debug\net5.0:

<PropertyGroup>
  <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>

CopyLocalLockFileAssemblies

Свойство CopyLocalLockFileAssemblies полезно для проектов подключаемых модулей, которые имеют зависимости от других библиотек. Если для этого свойства задано значение true, все зависимости пакета NuGet копируются в выходной каталог. Это означает, что вы можете использовать выходные данные dotnet build для запуска подключаемого модуля на любом компьютере.

<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

Совет

Кроме того, можно использовать dotnet publish для публикации библиотеки классов. Дополнительные сведения см. в разделе dotnet publish.

ErrorOnDuplicatePublishOutputFiles

Свойство ErrorOnDuplicatePublishOutputFiles указывает, выдает ли пакет SDK ошибку NETSDK1148, когда MSBuild обнаруживает дубликаты файлов в выходных данных публикации, но не может определить, какие файлы нужно удалить. Задайте для свойства ErrorOnDuplicatePublishOutputFiles значение false, если не нужно выдавать ошибку.

<PropertyGroup>
  <ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
</PropertyGroup>

Это свойство представлено в .NET 6.

GenerateRuntimeConfigDevFile

Начиная с пакета SDK для .NET 6, файл [Appname].runtimesettings.dev.jsonбольше не создается по умолчанию во время компиляции. Если вы по-прежнему хотите создать этот файл, задайте для свойства GenerateRuntimeConfigDevFile значение true.

<PropertyGroup>
  <GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>
</PropertyGroup>

GenerateRuntimeConfigurationFiles

Свойство GenerateRuntimeConfigurationFiles определяет, копируются ли параметры конфигурации среды выполнения из файла runtimeconfig. template.json в файл [имя приложения].runtimeconfig.json. Для приложений, которым требуется файл runtimeconfig.json, т.е. для тех, у которых OutputType имеет значение Exe, это свойство по умолчанию равно true.

<PropertyGroup>
  <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>

GenerateSatelliteAssembliesForCore

Свойство GenerateSatelliteAssembliesForCore определяет, создаются ли вспомогательные сборки при использовании csc.exe или Al.exe (компоновщик сборок) в проектах платформы .NET Framework. (Проекты .NET Core и .NET 5+ всегда используют csc.exe для создания вспомогательных сборок.) Для проектов платформы .NET Framework вспомогательные сборки по умолчанию создаются средством al.exe. Если для свойства GenerateSatelliteAssembliesForCore задано значение true, вспомогательные сборки создаются в csc.exe. Использование csc.exe может оказаться выгодным в следующих ситуациях:

<PropertyGroup>
  <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
</PropertyGroup>

IsPublishable

Свойство IsPublishable позволяет запускать целевой объект Publish. Это свойство касается только процессов, использующих файлы .*proj и целевой объект Publish, например команды dotnet publish. Оно не влияет на публикацию в Visual Studio, где используется целевой объект PublishOnly. Значение по умолчанию — true.

Это свойство полезно при запуске dotnet publish в файле решения, так как позволяет автоматически выбирать проекты, которые должны быть опубликованы.

<PropertyGroup>
  <IsPublishable>false</IsPublishable>
</PropertyGroup>

PreserveCompilationContext

Свойство PreserveCompilationContext позволяет собранному или опубликованному приложению компилировать дополнительный код во время выполнения с теми же параметрами, которые использовались во время сборки. Сборки, ссылки на которые были указаны во время сборки, будут скопированы в подкаталог ref выходного каталога. Имена базовых сборок хранятся в файле .deps.json приложения вместе с параметрами, передаваемыми компилятору. Эту информацию можно получить с помощью свойств DependencyContext.CompileLibraries и DependencyContext.CompilationOptions.

Эта функциональность в основном используется внутри системы для поддержки компиляции файлов Razor во время выполнения на страницах MVC и Razor ASP.NET Core.

<PropertyGroup>
  <PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>

PreserveCompilationReferences

Свойство PreserveCompilationReferences аналогично свойству PreserveCompilationContext за исключением того, что при его использовании в каталог публикации копируются только указанные ссылками сборки, но не копируется файл .deps.json.

<PropertyGroup>
  <PreserveCompilationReferences>true</PreserveCompilationReferences>
</PropertyGroup>

Дополнительные сведения см. в разделе Свойства пакета SDK Razor.

ProduceReferenceAssemblyInOutDir

В .NET 5 и более ранних версиях базовые сборки всегда записываются в каталог OutDir. В .NET 6 и более поздних версиях можно использовать свойство ProduceReferenceAssemblyInOutDir для управления записью базовых сборок в каталог OutDir. По умолчанию используется значение false, и базовые сборки записываются только в каталог IntermediateOutputPath. Задайте значение true, чтобы записывать базовые сборки в каталог OutDir.

<PropertyGroup>
  <ProduceReferenceAssemblyInOutDir>true</ProduceReferenceAssemblyInOutDir>
</PropertyGroup>

Дополнительные сведения: Запись базовых сборок в промежуточный вывод.

PublishDocumentationFile

Если это свойство имеет trueзначение, XML-файл документации для проекта, если он создается, включается в выходные данные публикации для проекта. По умолчанию свойство имеет значение true.

Совет

Присвойте GenerateDocumentationFile значение true для создания XML-файла документации во время компиляции.

PublishDocumentationFiles

Это свойство является флагом включения для нескольких других свойств, которые определяют, копируются ли различные типы XML-файлов документации в каталог публикации по умолчанию, а именно PublishDocumentationFile и PublishReferencesDocumentationFiles. Если эти свойства не заданы, и это свойство задано, эти свойства по умолчанию будут заданы true. По умолчанию свойство имеет значение true.

PublishReferencesDocumentationFiles

Если это свойство, trueXML-файлы документации для ссылок проекта копируются в каталог публикации, а не просто ресурсы во время выполнения, такие как DLL-файлы. По умолчанию свойство имеет значение true.

PublishRelease

Свойство PublishRelease сообщает dotnet publish о необходимости использовать по умолчанию конфигурацию Release вместо Debug. Это свойство было введено в .NET 7.

<PropertyGroup>
  <PublishRelease>true</PublishRelease>
</PropertyGroup>

Примечание.

  • Начиная с пакета SDK для .NET 8, PublishRelease по умолчанию используется true для проектов, предназначенных для .NET 8 или более поздней версии. Дополнительные сведения см. в разделе "Dotnet publish" (Публикация dotnet) использует конфигурацию выпуска.
  • Это свойство не влияет на поведение dotnet build /t:Publish, и оно изменяет конфигурацию только при публикации с помощью .NET CLI.
  • Только пакет SDK для .NET 7. Чтобы использовать PublishRelease в проекте, который является частью решения Visual Studio, необходимо задать для переменной DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONStrue среды значение (или любое другое значение). Если эта переменная включена при публикации решения, приоритет отдается значению PublishRelease исполняемого проекта, и новая конфигурация по умолчанию задается всем остальным проектам в решении. Если в решении содержится несколько исполняемых проектов или проектов верхнего уровня, значения PublishRelease которых различаются, публикация решения завершится сбоем. Для решений, имеющих множество проектов, использование этого параметра увеличивает время, необходимое для публикации.

PublishSelfContained

Свойство PublishSelfContained сообщает dotnet publish о публикации приложения в качестве автономного приложения. Это свойство полезно, если не удается использовать --self-contained аргумент для команды dotnet publish , например при публикации на уровне решения. В этом случае можно добавить свойство MSBuild в PublishSelfContained проект или файл Directory.Build.Props .

Это свойство было введено в .NET 7. Это похоже на свойство SelfContained , за исключением того, что оно зависит от publish команды. Вместо этого SelfContainedрекомендуется использовать PublishSelfContained .

<PropertyGroup>
  <PublishSelfContained>true</PublishSelfContained>
</PropertyGroup>

RollForward

Свойство RollForward управляет тем, как приложение выбирает среду выполнения, если доступно несколько версий. Это значение выводится в .runtimeconfig.js в качестве параметра rollForward.

<PropertyGroup>
  <RollForward>LatestMinor</RollForward>
</PropertyGroup>

Задайте для RollForward одно из следующих значений:

значение Описание
Minor Значение по умолчанию, если не указано.
Накат до дополнительной версии со следующим по порядку возрастания номером, если запрошенная дополнительная версия отсутствует. Если запрошенная дополнительная версия присутствует, используется политика LatestPatch.
Major Накат до следующей доступной основной версии или следующей дополнительной версии с наименьшим номером, если запрошенная дополнительная версия отсутствует. Если запрошенная дополнительная версия присутствует, используется политика Minor.
LatestPatch Накат до версии с наибольшим номером исправления. Это значение отключает накат до дополнительных версий.
LatestMinor Накат до дополнительной версии с наибольшим номером, даже если запрошенная дополнительная версия присутствует.
LatestMajor Накат до основной версии с наибольшим номером и дополнительной версии с наибольшим номером, даже если запрошенная основная версия присутствует.
Disable Не выполнять накат, привязывать только к указанной версии. Эта политика не рекомендуется для общего использования, поскольку отключает возможность наката до последних исправлений. Это значение рекомендуется использовать только для тестирования.

Дополнительные сведения см. в разделе Управление поведением наката.

RuntimeFrameworkVersion

Свойство RuntimeFrameworkVersion указывает версию среды выполнения, используемую при публикации. Укажите версию среды выполнения:

<PropertyGroup>
  <RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>

При публикации приложения, зависящего от платформы, это значение указывает минимальную требуемую версию. При публикации автономного приложения это значение указывает точную требуемую версию.

RuntimeIdentifier

Свойство RuntimeIdentifier позволяет указать для проекта один идентификатор среды выполнения (RID). Идентификатор среды выполнения позволяет опубликовать автономное развертывание.

<PropertyGroup>
  <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
</PropertyGroup>

RuntimeIdentifiers

Свойство RuntimeIdentifiers позволяет указать для проекта список идентификаторов среды выполнения (RID) (в качестве разделителя используется точка с запятой). Используйте это свойство, если вам нужна публикация для нескольких сред. RuntimeIdentifiers используется во время восстановления для обеспечения наличия в графе нужных ресурсов.

Совет

RuntimeIdentifier (в единственном числе) может ускорить создание сборок, когда требуется только одна среда выполнения.

<PropertyGroup>
  <RuntimeIdentifiers>win-x64;osx-x64;linux-x64</RuntimeIdentifiers>
</PropertyGroup>

SatelliteResourceLanguages

Свойство SatelliteResourceLanguages позволяет указать, какие языки необходимо сохранить для вспомогательных сборок ресурсов во время сборки и публикации. Многие пакеты NuGet содержат локализованные вспомогательные сборки ресурсов в основном пакете. Для проектов, которые ссылаются на эти пакеты NuGet, но не требуют локализованных ресурсов, локализованные сборки могут без необходимости увеличить размер выходных данных сборки и публикации. Если вы добавите свойство SatelliteResourceLanguages в файл проекта, в выходные данные сборки и публикации будут включены только локализованные сборки для указанных вами языков. Например, в указанном ниже файле проекта будут сохранены только вспомогательные сборки ресурсов на английском (США) и немецком (Германия) языках.

<PropertyGroup>
  <SatelliteResourceLanguages>en-US;de-DE</SatelliteResourceLanguages>
</PropertyGroup>

Примечание.

  • Это свойство необходимо указать в проекте, который ссылается на пакет NuGet с локализованными вспомогательными сборками ресурсов.

  • Чтобы указать несколько языков в качестве аргумента dotnet publish, необходимо добавить три пары кавычки вокруг идентификаторов языка. Например:

    dotnet msbuild multi.msbuildproj -p:SatelliteResourceLanguages="""de;en"""

SelfContained

Свойство SelfContained сообщает dotnet build и dotnet publish создает или публикует приложение как автономное приложение. Это свойство полезно, если аргумент нельзя использовать --self-contained с командой dotnet , например при публикации на уровне решения. В этом случае можно добавить свойство MSBuild в SelfContained проект или файл Directory.Build.Props .

Это свойство аналогично свойству PublishSelfContained . Рекомендуется использовать PublishSelfContained вместо того, SelfContained чтобы по возможности.

<PropertyGroup>
  <SelfContained>true</SelfContained>
</PropertyGroup>

UseAppHost

Свойство UseAppHost контролирует создание собственного исполняемого файла для развертывания. Этот файл требуется для автономных развертываний. Исполняемый файл, зависящий от платформы, создается по умолчанию. Задайте свойству UseAppHost значение false, чтобы отключить создание исполняемого файла.

<PropertyGroup>
  <UseAppHost>false</UseAppHost>
</PropertyGroup>

Дополнительные сведения см. в статье о развертывании приложений .NET.

Доступно множество свойств MSBuild, позволяющих тонко настроить обрезку неиспользуемого кода в автономных развертываниях. Они подробно описаны в статье Параметры обрезки. В следующей таблице приводится краткий справочник.

Свойство Значения Description
PublishTrimmed true или false Определяет, включена ли обрезка во время публикации.
TrimMode full или partial По умолчанию — full. Управляет степенью детализации обрезки.
SuppressTrimAnalysisWarnings true или false Контролирует выдачу предупреждений анализа обрезки.
EnableTrimAnalyzer true или false Контролирует выдачу определенного набора предупреждений анализа обрезки. Вы можете включить анализ, даже если PublishTrimmed имеет значение false.
ILLinkTreatWarningsAsErrors true или false Определяет, рассматривать ли предупреждения об обрезке как ошибки. Например, вы можете задать этому свойству значение false, если для TreatWarningsAsErrors задано true.
TrimmerSingleWarn true или false Определяет, отображать ли по одному предупреждению на сборку или все предупреждения.
TrimmerRemoveSymbols true или false Определяет, удалять ли все символы из приложения с обрезкой.

В этом разделе описаны следующие свойства MSBuild:

Параметры компилятора C#, такие как LangVersion и Nullable, также можно указать в качестве свойств MSBuild в файле проекта. Дополнительные сведения см. в разделе Параметры компилятора C#.

ContinuousIntegrationBuild

Свойство ContinuousIntegrationBuild указывает, выполняется ли сборка на сервере непрерывной интеграции (CI). Если задано значение true, это свойство включает параметры, которые применяются только к официальным сборкам, а не к локальным сборкам на компьютере разработчика. Например, хранимые пути к файлам нормализуются для официальных сборок. Но на локальном компьютере разработки отладчик не может найти локальные исходные файлы, если пути к файлам нормализуются.

Примечание.

В настоящее время установка этого свойства true работает только в том случае, если вы добавляете ссылку на определенный пакет поставщика SourceLink или <SourceRoot Include="$(MyDirectory)" /> элемент. Дополнительные сведения см. в статье dotnet/roslyn issue 55860.

Для условного ContinuousIntegrationBuild задания свойства можно использовать переменную системы CI. Например, имя переменной для Azure Pipelines:TF_BUILD

<PropertyGroup Condition="'$(TF_BUILD)' == 'true'">
  <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>

Для GitHub Actions имя переменной :GITHUB_ACTIONS

<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
  <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>

CopyDebugSymbolFilesFromPackages

Если для этого свойства задано trueзначение, все файлы символов (также известные как PDB-файлы) из PackageReference элементов проекта копируются в выходные данные сборки. Эти файлы могут предоставлять более информативные трассировки стека для исключений и сделать дампы памяти и трассировки запущенного приложения проще понять. Однако в том числе эти файлы приводят к увеличению размера пакета развертывания.

Это свойство было введено в пакете SDK для .NET 7.0.100, хотя оно по умолчанию не указано.

CopyDocumentationFilesFromPackages

Если для этого свойства задано trueзначение, все созданные XML-файлы документации из PackageReference элементов проекта копируются в выходные данные сборки. Обратите внимание, что включение этой функции приведет к увеличению размера пакета развертывания.

Это свойство было введено в пакете SDK для .NET 7.0.100, хотя оно по умолчанию не указано.

DisableImplicitFrameworkDefines

Свойство DisableImplicitFrameworkDefines определяет, должен ли пакет SDK создавать символы препроцессора для требуемой версии .NET Framework и платформы проекта .NET. Если свойство имеет значение false или не задано (значение по умолчанию), то символы препроцессора создаются для следующего:

  • Framework без версии (NETFRAMEWORK, NETSTANDARD, NET)
  • Framework с версией (NET48, NETSTANDARD2_0, NET6_0)
  • Framework с минимальной границей версии (NET48_OR_GREATER, NETSTANDARD2_0_OR_GREATER, NET6_0_OR_GREATER)

Дополнительные сведения о моникерах целевой платформы и этих неявных символах препроцессора см. в статье Требуемые версии .NET Framework.

Кроме того, если указать в проекте требуемую версию .NET Framework для конкретной операционной системы (например, net6.0-android), то создаются следующие символы препроцессора:

  • Платформа без версии (ANDROID, IOS, WINDOWS)
  • Платформа с версией (IOS15_1)
  • Платформа с минимальной границей версии (IOS15_1_OR_GREATER)

Дополнительные сведения о моникерах целевой платформы для конкретных операционных систем см. в разделе TFM для конкретной ОС.

Наконец, если требуемая версия .NET Framework подразумевает поддержку более старых версий Framework, символы препроцессора создаются для этих версий. Например, net6.0подразумевает поддержку net5.0 и так далее, вплоть до .netcoreapp1.0. Таким образом, для каждой из этих версий .NET Framework будет определен символ Framework с минимальной границей версии.

DocumentationFile

Свойство DocumentationFile позволяет указать имя файла XML, содержащего документацию для библиотеки. Для правильной работы IntelliSense с вашей документацией имя файла должно совпадать с именем сборки и находиться в том же каталоге, что и сборка. Если вы не определили это свойство, но задали для GenerateDocumentationFile значение true, именем файла документации по умолчанию будет имя вашей сборки, но с расширением файла .xml. По этой причине часто проще опустить это свойство и использовать вместо него свойство GenerateDocumentationFile.

Если вы определили это свойство, но для GenerateDocumentationFile задали значение false, компилятор не создаст файл документации. Если вы определили это свойство и опустили GenerateDocumentationFile, компилятор создаст файл документации.

<PropertyGroup>
  <DocumentationFile>path/to/file.xml</DocumentationFile>
</PropertyGroup>

EmbeddedResourceUseDependentUponConvention

Свойство EmbeddedResourceUseDependentUponConvention определяет, будет ли использоваться информация о типах в исходных файлах, расположенных в одной папке с файлами ресурсов, для создания имен файлов манифеста этих ресурсов. Например, если Form1.resx находится в той же папке, что и Form1.cs, а EmbeddedResourceUseDependentUponConvention имеет значение true, то созданному файл .resources присваивается имя на основе имени первого типа, определенного в файле Form1.cs. Если MyNamespace.Form1 это первый тип, определенный в Form1.cs, то созданное имя файла — MyNamespace.Form1.resources.

Примечание.

Если для EmbeddedResource элемента заданы метаданные LogicalName, ManifestResourceName или DependentUpon, то имя файла манифеста для этого файла ресурсов будет создаваться на основе таких метаданных.

По умолчанию в новом проекте .NET, который предназначен для .NET Core 3.0 или более поздней версии, это свойство имеет значение true. Если задано значение false и для элемента EmbeddedResource в файле проекта не указаны метаданные LogicalName, ManifestResourceName или DependentUpon, то имя файла манифеста для этого ресурса будет основано на имени корневого пространства имен проекта и относительном пути к файлу .resx. Дополнительные сведения об определение имени файла манифеста см. здесь.

<PropertyGroup>
  <EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>

EnablePreviewFeatures

Свойство EnablePreviewFeatures определяет, зависит ли ваш проект от каких-либо API или сборок, снабженных атрибутом RequiresPreviewFeaturesAttribute. Этот атрибут используется для обозначения того, что API или сборка использует функции, которые считаются предварительными версиями для версии пакета SDK, которую вы используете. Предварительные версии функций не поддерживаются и могут быть удалены в будущих версиях. Чтобы включить предварительные версии функций, задайте для свойства значение True.

<PropertyGroup>
  <EnablePreviewFeatures>True</EnablePreviewFeatures>
</PropertyGroup>

Если проект содержит свойство, для которого задано значение True, в файл AssemblyInfo.cs добавляется следующий атрибут уровня сборки:

[assembly: RequiresPreviewFeatures]

Анализатор выдает предупреждение, если этот атрибут имеется в зависимостях для проектов, где для EnablePreviewFeatures не задано значение True.

Авторы библиотек, которые планируют поставлять сборки с предварительными версиями функций, присвойте этому свойству значение True. Если в поставляемую сборку входят как предварительные, так и другие версии API, см. раздел GenerateRequiresPreviewFeaturesAttribute.

EnableWindowsTargeting

EnableWindowsTargeting Задайте свойство для true создания приложений Windows (например, приложений Windows Forms или Windows Presentation Foundation) на платформе, отличной от Windows. Если это свойство trueне задано, вы получите предупреждение о сборке NETSDK1100. Эта ошибка возникает, так как целевые пакеты и пакеты среды выполнения не загружаются автоматически на платформах, которые не поддерживаются. Задав это свойство, эти пакеты загружаются при перекрестном нацеливанию.

Примечание.

Сейчас это свойство рекомендуется разрешить разработку на платформах, отличных от Windows. Но когда приложение готово к выпуску, оно должно быть создано в Windows. При построении на платформе, отличной от Windows, выходные данные могут совпадать с тем, что при сборке в Windows. В частности, исполняемый файл не помечен как приложение Windows (это означает, что он всегда будет запускать окно консоли) и не будет внедрен значок.

<PropertyGroup>
  <EnableWindowsTargeting>true</EnableWindowsTargeting>
</PropertyGroup>

GenerateDocumentationFile

Свойство GenerateDocumentationFile определяет, создаст ли компилятор файл документации XML для вашей библиотеки. Если вы задали для этого свойства значение true и не указали имя файла через свойство DocumentationFile, сгенерированный файл XML будет помещен в тот же выходной каталог, что и ваша сборка, и будет иметь то же имя файла (но с расширением .xml).

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

Дополнительные сведения о создании документации из комментариев к коду см. в статьях Комментарии к документации XML (C#), Документирование кода с помощью XML (Visual Basic) или Документирование кода с помощью XML (F#).

GenerateRequiresPreviewFeaturesAttribute

Свойство GenerateRequiresPreviewFeaturesAttribute тесно связано со свойством EnablePreviewFeatures. Если ваша библиотека использует предварительные версии функций, но вы не хотите, чтобы вся сборка была помечена атрибутом RequiresPreviewFeaturesAttribute, что потребует от всех потребителей включения предварительных версий функций, присвойте этому свойству значение False.

<PropertyGroup>
    <EnablePreviewFeatures>True</EnablePreviewFeatures>
    <GenerateRequiresPreviewFeaturesAttribute>False</GenerateRequiresPreviewFeaturesAttribute>
</PropertyGroup>

Внимание

Если свойству GenerateRequiresPreviewFeaturesAttribute задано значение False, вы должны быть уверены в том, что все общедоступные API, использующие предварительные версии функций, будет присвоен атрибут RequiresPreviewFeaturesAttribute.

OptimizeImplicitlyTriggeredBuild

Чтобы сократить время сборки, для неявно активированных Visual Studio сборок пропускается анализ кода, включая анализ типов, допускающих значения NULL. Visual Studio активирует неявную сборку, например, при выполнении тестов. Однако неявные сборки оптимизируются только в том случае, если TreatWarningsAsErrors не имеет значение true. Если для параметра TreatWarningsAsErrors задано значение true, но вы все равно хотите оптимизировать неявно активированные сборки, можно задать для OptimizeImplicitlyTriggeredBuild значение True. Чтобы отключить оптимизацию неявно активированных сборок, присвойте параметру OptimizeImplicitlyTriggeredBuild значение False.

<PropertyGroup>
    <OptimizeImplicitlyTriggeredBuild>True</OptimizeImplicitlyTriggeredBuild>
</PropertyGroup>

DisableRuntimeMarshalling

Свойство DisableRuntimeMarshalling позволяет указать, что вы хотите отключить поддержку маршаллинга среды выполнения для проекта. Если для этого свойства задано trueзначение, то добавляется в сборку, DisableRuntimeMarshallingAttribute а все P/Invokes или делегаты взаимодействия будут следовать правилам для отключаемой маршаллинга среды выполнения.

<PropertyGroup>
    <DisableRuntimeMarshalling>True</DisableRuntimeMarshalling>
</PropertyGroup>

Свойства включения элементов по умолчанию

В этом разделе описаны следующие свойства MSBuild:

Дополнительные сведения см. в разделе Включения и исключения по умолчанию.

DefaultItemExcludes

Используйте свойство DefaultItemExcludes, чтобы определить стандартные маски для файлов и папок, которые должны быть исключены из стандартных масок включения, исключения и удаления. По умолчанию папки ./bin и ./obj исключаются из стандартных масок.

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);**/*.myextension</DefaultItemExcludes>
</PropertyGroup>

DefaultItemExcludesInProjectFolder

Используйте свойство DefaultItemExcludesInProjectFolder, чтобы определить стандартные маски для файлов и папок в папке проекта, которые должны быть исключены из стандартных масок включения, исключения и удаления. По умолчанию папки, начинающиеся с точки (.), такие как .git и .vs, исключаются из стандартных масок.

Это свойство очень похоже на свойство DefaultItemExcludes, за исключением того, что оно учитывает только файлы и папки в папке проекта. Если стандартная маска будет случайно соответствовать элементам за пределами папки проекта с относительным путем, используйте свойство DefaultItemExcludesInProjectFolder вместо свойства DefaultItemExcludes.

<PropertyGroup>
  <DefaultItemExcludesInProjectFolder>$(DefaultItemExcludesInProjectFolder);**/myprefix*/**</DefaultItemExcludesInProjectFolder>
</PropertyGroup>

EnableDefaultItems

Свойство EnableDefaultItems определяет, включаются ли в проект неявным образом элементы компиляции, элементы внедренных ресурсов и элементы None. Значение по умолчанию — true. Задайте значение false для свойства EnableDefaultItems, чтобы отключить все неявные включения файлов.

<PropertyGroup>
  <EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>

EnableDefaultCompileItems

Свойство EnableDefaultCompileItems определяет, включаются ли в проект неявным образом элементы компиляции. Значение по умолчанию — true. Задайте значение false для свойства EnableDefaultCompileItems, чтобы отключить неявное включение файлов *.cs и других файлов расширения языка.

<PropertyGroup>
  <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>

EnableDefaultEmbeddedResourceItems

Свойство EnableDefaultEmbeddedResourceItems определяет, включаются ли в проект неявным образом элементы внедренных ресурсов. Значение по умолчанию — true. Задайте значение false для свойства EnableDefaultEmbeddedResourceItems, чтобы отключить неявное включение файлов внедренных ресурсов.

<PropertyGroup>
  <EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
</PropertyGroup>

EnableDefaultNoneItems

Свойство EnableDefaultNoneItems определяет, включаются ли в проект неявным образом элементы None (файлы, которые не играют никакой роли в процессе сборки). Значение по умолчанию — true. Задайте значение false для свойства EnableDefaultNoneItems, чтобы отключить неявное включение элементов None.

<PropertyGroup>
  <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
</PropertyGroup>

Свойства анализа кода

В этом разделе описаны следующие свойства MSBuild:

AnalysisLevel

Свойство AnalysisLevel позволяет указать набор выполняемых анализаторов кода в соответствии с выпуском .NET. В каждом выпуске .NET, начиная с .NET 5, есть набор правил анализа кода. Правила из этого набора, которые включены по умолчанию для этого выпуска, будут применяться для анализа кода. Например, при обновлении до .NET 8, но не требуется изменять набор правил анализа кода по умолчанию.AnalysisLevel7

<PropertyGroup>
  <AnalysisLevel>preview</AnalysisLevel>
</PropertyGroup>

Начиная с версии .NET 6, при необходимости вы можете указать для этого свойства составное значение, которое также определяет, насколько агрессивно будут применяться правила. Составные значения имеют такой вид: <version>-<mode>, где в качестве значения <mode> указано одно из значений AnalysisMode. В следующем примере используется предварительная версия анализаторов кода и включается рекомендуемый набор правил.

<PropertyGroup>
  <AnalysisLevel>preview-recommended</AnalysisLevel>
</PropertyGroup>

Значение по умолчанию:.

  • Если проект предназначен для .NET 5 или более поздней версии либо если вы добавили свойство AnalysisMode, значением по умолчанию будет latest.
  • В противном случае это свойство не будет учитываться, если оно явно не добавлено в файл проекта.

В следующей таблице приведены все значения, которые можно задать.

Значение Значение
latest Используются новейшие анализаторы кода, которые были выпущены. Это значение по умолчанию.
latest-<mode> Используются новейшие анализаторы кода, которые были выпущены. Значение <mode> определяет, какие правила включены.
preview Используются новейшие анализаторы кода, даже если они находятся на этапе предварительной версии.
preview-<mode> Используются новейшие анализаторы кода, даже если они находятся на этапе предварительной версии. Значение <mode> определяет, какие правила включены.
8.0 Используется набор правил, доступных для выпуска .NET 8, даже если новые правила доступны.
8.0-<mode> Используется набор правил, доступных для выпуска .NET 8, даже если новые правила доступны. Значение <mode> определяет, какие правила включены.
8 Используется набор правил, доступных для выпуска .NET 8, даже если новые правила доступны.
8-<mode> Используется набор правил, доступных для выпуска .NET 8, даже если новые правила доступны. Значение <mode> определяет, какие правила включены.
7.0 Используется набор правил, доступных для выпуска .NET 7, даже если доступны более новые правила.
7.0-<mode> Используется набор правил, доступных для выпуска .NET 7, даже если доступны более новые правила. Значение <mode> определяет, какие правила включены.
7 Используется набор правил, доступных для выпуска .NET 7, даже если доступны более новые правила.
7-<mode> Используется набор правил, доступных для выпуска .NET 7, даже если доступны более новые правила. Значение <mode> определяет, какие правила включены.
6.0 Используется набор правил, доступных для выпуска .NET 6, даже если доступны новые правила.
6.0-<mode> Используется набор правил, доступных для выпуска .NET 6, даже если доступны новые правила. Значение <mode> определяет, какие правила включены.
6 Используется набор правил, доступных для выпуска .NET 6, даже если доступны новые правила.
6-<mode> Используется набор правил, доступных для выпуска .NET 6, даже если доступны новые правила. Значение <mode> определяет, какие правила включены.
5.0 Используется набор правил, доступных для выпуска .NET 5, даже если доступны новые правила.
5.0-<mode> Используется набор правил, доступных для выпуска .NET 5, даже если доступны новые правила. Значение <mode> определяет, какие правила включены.
5 Используется набор правил, доступных для выпуска .NET 5, даже если доступны новые правила.
5-<mode> Используется набор правил, доступных для выпуска .NET 5, даже если доступны новые правила. Значение <mode> определяет, какие правила включены.

Примечание.

  • Начиная с .NET 6, если задано значение EnforceCodeStyleInBuildtrue, это свойство влияет на правила стиля кода (IDEXXXXXX) (в дополнение к правилам качества кода).
  • Если для AnalysisLevel задано составное значение, указывать AnalysisMode не нужно. Иначе AnalysisLevel будет иметь приоритет над AnalysisMode.
  • Это свойство не влияет на анализ кода в проектах, которые не ссылаются на пакет SDK проекта, например, проекты на устаревших платформах .NET Framework, которые ссылаются на пакет NuGet Microsoft.CodeAnalysis.NetAnalyzers.

AnalysisLevel<Категория>

Это свойство совпадает с AnalysisLevel, за исключением того, что оно применяется только к определенной категории правил анализа кода. Это свойство позволяет применить другую версию анализаторов кода для определенной категории, а также включать и отключать правила на другом уровне для других категорий правил. Если опустить это свойство для определенной категории правил, по умолчанию будет использоваться значение AnalysisLevel. Для этого свойства доступны такие же значения, как для AnalysisLevel.

<PropertyGroup>
  <AnalysisLevelSecurity>preview</AnalysisLevelSecurity>
</PropertyGroup>
<PropertyGroup>
  <AnalysisLevelSecurity>preview-recommended</AnalysisLevelSecurity>
</PropertyGroup>

В следующей таблице указано имя свойства для каждой категории правил.

Имя свойства Категория правил
<AnalysisLevelDesign> Правила проектирования
<AnalysisLevelDocumentation> Правила документации
<AnalysisLevelGlobalization> Правила глобализации
<AnalysisLevelInteroperability> Правила переносимости и взаимодействия
<AnalysisLevelMaintainability> Правила обслуживания
<AnalysisLevelNaming> Правила именования
<AnalysisLevelPerformance> Правила производительности
<AnalysisLevelSingleFile> Правила однофайловых приложений
<AnalysisLevelReliability> Правила надежности
<AnalysisLevelSecurity> Правила безопасности
<AnalysisLevelStyle> Правила стиля кода (IDEXXXX)
<AnalysisLevelUsage> Правила использования

AnalysisMode

Пакет SDK для .NET поставляется со всеми правилами качества кода ЦС. По умолчанию в каждом выпуске .NET в качестве предупреждений о сборке включены только некоторые правила. Свойство AnalysisMode позволяет настроить набор правил, включенных по умолчанию. Вы можете переключиться в более агрессивный режим анализа с возможностью отказа от правил по отдельности, или более консервативный режим с возможностью выбора определенных правил. Например, если вы хотите включить все правила как предупреждения сборки, задайте значение All.

<PropertyGroup>
  <AnalysisMode>All</AnalysisMode>
</PropertyGroup>

В следующей таблице показаны доступные значения параметров. Эти параметры перечислены в порядке возрастания количества правил, которые они включают.

значение Описание
None Все правила отключены. Можно выборочно принять отдельные правила, чтобы включить их.
Default Режим по умолчанию, при котором определенные правила включаются в виде предупреждений сборки, некоторые правила включаются в качестве предложений интегрированной среды разработки Visual Studio, а остальные отключаются.
Minimum Более агрессивный режим, чем Default режим. Определенные предложения, которые настоятельно рекомендуются для принудительного применения сборки, включены как предупреждения сборки. Чтобы узнать, какие правила включаются, проверьте файл %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_minimum.editorconfig file.
Recommended Более агрессивный режим, чем Minimum режим, где в качестве предупреждений сборки включены дополнительные правила. Чтобы узнать, какие правила включаются, проверьте файл %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_recommended.editorconfig-файл .
All Все правила включены в качестве предупреждений сборки*. Вы можете выборочно отказаться от отдельных правил, чтобы отключить их.

* Следующие правила не включены с помощью параметров AllAnalysisMode или параметров AnalysisLevellatest-all: CA1017, CA1045, CA1005, CA1014, CA1060, CA1021 и правил анализатора метрик кода (CA1501, CA1502, CA1505, CA1506 и CA1509). Эти устаревшие правила могут быть устаревшими в будущей версии. Однако их можно включить по отдельности dotnet_diagnostic.CAxxxx.severity = <severity> с помощью записи.

Примечание.

  • Начиная с .NET 6, если задано значение EnforceCodeStyleInBuildtrue, это свойство влияет на правила стиля кода (IDEXXXXXX) (в дополнение к правилам качества кода).
  • Если вы используете составное значение для AnalysisLevel, например <AnalysisLevel>8-recommended</AnalysisLevel>, это свойство можно опустить. Но если указать оба свойства, AnalysisLevel будет иметь приоритет над AnalysisMode.
  • Это свойство не влияет на анализ кода в проектах, которые не ссылаются на пакет SDK проекта, например, проекты на устаревших платформах .NET Framework, которые ссылаются на пакет NuGet Microsoft.CodeAnalysis.NetAnalyzers.

AnalysisMode<Категория>

Это свойство совпадает с AnalysisMode, за исключением того, что оно применяется только к определенной категории правил анализа кода. Это свойство позволяет включать и отключать правила на другом уровне для других категорий правил. Если опустить это свойство для определенной категории правил, по умолчанию будет использоваться значение AnalysisMode. Для этого свойства доступны такие же значения, как для AnalysisMode.

<PropertyGroup>
  <AnalysisModeSecurity>All</AnalysisModeSecurity>
</PropertyGroup>

В следующей таблице указано имя свойства для каждой категории правил.

Имя свойства Категория правил
<AnalysisModeDesign> Правила проектирования
<AnalysisModeDocumentation> Правила документации
<AnalysisModeGlobalization> Правила глобализации
<AnalysisModeInteroperability> Правила переносимости и взаимодействия
<AnalysisModeMaintainability> Правила обслуживания
<AnalysisModeNaming> Правила именования
<AnalysisModePerformance> Правила производительности
<AnalysisModeSingleFile> Правила однофайловых приложений
<AnalysisModeReliability> Правила надежности
<AnalysisModeSecurity> Правила безопасности
<AnalysisModeStyle> Правила стиля кода (IDEXXXX)
<AnalysisModeUsage> Правила использования

CodeAnalysisTreatWarningsAsErrors

Свойство CodeAnalysisTreatWarningsAsErrors позволяет настроить, следует ли обрабатывать предупреждения анализа качества кода (CAxxxx) как предупреждения и прекращать сборку. Если при построении проектов используется флаг -warnaserror, предупреждения анализа качества кода .NET также обрабатываются как ошибки. Если вы не хотите, чтобы предупреждения качества кода обрабатывались как ошибки, можно задать для свойства MSBuild CodeAnalysisTreatWarningsAsErrors значение false в файле проекта.

<PropertyGroup>
  <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>

EnableNETAnalyzers

Для проектов, предназначенных для .NET 5 или более поздней версии, по умолчанию включен анализ качества кода .NET. Если при разработке вы используете пакет SDK NET 5+, вы можете включить анализ кода .NET для проектов в стиле пакета SDK, предназначенных для более ранних версий .NET, установив для свойства EnableNETAnalyzers значение true. Чтобы отключить анализ кода в любом проекте, присвойте этому свойству значение false.

<PropertyGroup>
  <EnableNETAnalyzers>true</EnableNETAnalyzers>
</PropertyGroup>

Примечание.

Это свойство применяется к встроенным анализаторам в пакете SDK для .NET 5+. Его не следует использовать при установке пакета NuGet для анализа кода.

EnforceCodeStyleInBuild

Анализ стиля кода .NET по умолчанию отключен при сборке для всех проектов .NET. Можно включить анализ стиля кода для проектов .NET, задав для свойства EnforceCodeStyleInBuild значение true.

<PropertyGroup>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

Все правила стиля кода, которые настроены как предупреждения или ошибки, будут выполняться при нарушениях сборки и отчета.

_SkipUpgradeNetAnalyzersNuGetWarning

Свойство _SkipUpgradeNetAnalyzersNuGetWarning позволяет настроить выдачу предупреждений, когда используемые анализаторы кода из пакета NuGet имеют устаревшую версию по сравнению с анализаторами из последнего пакета SDK для .NET. Предупреждение выглядит примерно так:

Пакет SDK для .NET включает анализаторы с версией "6.0.0", которая новее, чем "5.0.3" из пакета "Microsoft.CodeAnalysis.NetAnalyzers". Обновите или удалите ссылку на этот пакет.

Чтобы убрать это предупреждение и продолжить использовать версию анализаторов кода из пакета NuGet, задайте для _SkipUpgradeNetAnalyzersNuGetWarning значение true в файле проекта.

<PropertyGroup>
  <_SkipUpgradeNetAnalyzersNuGetWarning>true</_SkipUpgradeNetAnalyzersNuGetWarning>
</PropertyGroup>

Свойства конфигурации среды выполнения

Некоторые действия среды выполнения можно настроить, указав свойства MSBuild в файле проекта приложения. Дополнительные сведения о других способах настройки поведения среды выполнения см. в разделе "Параметры конфигурации среды выполнения".

AutoreleasePoolSupport

Свойство AutoreleasePoolSupport настраивает, получает ли каждый управляемый поток неявный NSAutoreleasePool при запуске на поддерживаемой платформе macOS. Дополнительные сведения см. в разделе AutoreleasePool об управляемых потоках.

<PropertyGroup>
  <AutoreleasePoolSupport>true</AutoreleasePoolSupport>
</PropertyGroup>

ConcurrentGarbageCollection

Свойство ConcurrentGarbageCollection указывает, включена ли фоновая (параллельная) сборка мусора. Задайте значение false, чтобы отключить фоновую сборку мусора. Дополнительные сведения см. в разделе Сборка мусора в фоновом режиме.

<PropertyGroup>
  <ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>

InvariantGlobalization

Свойство InvariantGlobalization определяет, выполняется ли приложение в инвариантном режиме глобализации, что означает, что у него нет доступа к данным, относящимся к языку и региональным параметрам. Установите значение true для запуска в инвариантном режиме глобализации. Дополнительные сведения см. в разделе Инвариантный режим.

<PropertyGroup>
  <InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>

PredefinedCulturesOnly

В .NET 6 и более поздних версиях свойство PredefinedCulturesOnly определяет, могут ли приложения создавать языки и региональные параметры, отличные от инвариантных, если включен инвариантный режим глобализации. Значение по умолчанию — true. Установите значение false, чтобы разрешить создание языка и региональных параметров в инвариантном режиме глобализации.

<PropertyGroup>
  <PredefinedCulturesOnly>false</PredefinedCulturesOnly>
</PropertyGroup>

Дополнительные сведения см. в разделе Создание языка и региональных параметров и сопоставление регистра в инвариантном режиме глобализации.

RetainVMGarbageCollection

Свойство RetainVMGarbageCollection настраивает сборщик мусора для помещения удаленных сегментов памяти в список ожидания для будущего использования или освобождения. Значение true указывает сборщику мусора разместить сегменты в списке ожидания. Дополнительные сведения см. в разделе Сохранение виртуальной машины.

<PropertyGroup>
  <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>

ServerGarbageCollection

Свойство ServerGarbageCollection указывает, использует ли приложение сборку мусора рабочей станции или сборку мусора сервера. Задайте значение true, чтобы использовать сборку мусора сервера. Дополнительные сведения см. в разделе Рабочая станция и сервер.

<PropertyGroup>
  <ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>

ThreadPoolMaxThreads

Свойство ThreadPoolMaxThreads указывает максимальное число потоков для пула рабочих потоков. Дополнительные сведения см. в разделе Максимальное число потоков.

<PropertyGroup>
  <ThreadPoolMaxThreads>20</ThreadPoolMaxThreads>
</PropertyGroup>

ThreadPoolMinThreads

Свойство ThreadPoolMinThreads указывает минимальное число потоков для пула рабочих потоков. Дополнительные сведения см. в разделе Минимальное число потоков.

<PropertyGroup>
  <ThreadPoolMinThreads>4</ThreadPoolMinThreads>
</PropertyGroup>

TieredCompilation

Свойство TieredCompilation указывает, использует ли JIT-компилятор многоуровневую компиляцию. Задайте значение false, чтобы отключить многоуровневую компиляцию. Дополнительные сведения см. в разделе Многоуровневая компиляция.

<PropertyGroup>
  <TieredCompilation>false</TieredCompilation>
</PropertyGroup>

TieredCompilationQuickJit

Свойство TieredCompilationQuickJit указывает, использует ли JIT-компилятор быструю JIT-компиляцию. Задайте значение false, чтобы отключить быструю JIT-компиляцию. Дополнительные сведения см. в разделе Быстрая JIT-компиляция.

<PropertyGroup>
  <TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>

TieredCompilationQuickJitForLoops

Свойство TieredCompilationQuickJitForLoops указывает, использует ли JIT-компилятор быструю JIT-компиляцию для методов, содержащих циклы. Задайте значение true, чтобы включить быструю JIT-компиляцию для методов, содержащих циклы. Дополнительные сведения см. в разделе Быстрая JIT-компиляция для циклов.

<PropertyGroup>
  <TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>

TieredPGO

Свойство TieredPGO определяет, включена ли динамическая или многоуровневая оптимизация (PGO). Задайте значение для true включения многоуровневого PGO. Дополнительные сведения см. в разделе "Оптимизация с помощью профилей".

<PropertyGroup>
  <TieredPGO>true</TieredPGO>
</PropertyGroup>

UseWindowsThreadPool

Свойство UseWindowsThreadPool настраивает делегирование управления потоками пула потоков в пул потоков Windows (только Для Windows). Значением по умолчанию является falseпул потоков .NET. Дополнительные сведения см. в пуле потоков Windows.

<PropertyGroup>
  <UseWindowsThreadPool>true</UseWindowsThreadPool>
</PropertyGroup>

В этом разделе описаны следующие свойства MSBuild:

AssetTargetFallback

Свойство AssetTargetFallback позволяет указать дополнительные совместимые версии платформы для ссылок на проекты и пакетов NuGet. Например, если вы указали зависимость пакета с помощью PackageReference, но в этом пакете нет ресурсов, совместимых с TargetFramework вашего проекта, тогда пригодится свойство AssetTargetFallback. Совместимость пакета, на который указывает ссылка, повторно проверяется с помощью каждой целевой платформы, указанной в свойстве AssetTargetFallback. Это свойство заменяет устаревшее свойство PackageTargetFallback.

В качестве значения свойства AssetTargetFallback можно задать одну версию целевой платформы или несколько.

<PropertyGroup>
  <AssetTargetFallback>net461</AssetTargetFallback>
</PropertyGroup>

DisableImplicitFrameworkReferences

Свойство DisableImplicitFrameworkReferences управляет неявными элементами FrameworkReference при разработке для .NET Core 3.0 и более поздних версий. При использовании .NET Core 2.1 или .NET Standard 2.0 и более ранних версий оно управляет неявными элементами PackageReference в пакетах в метапакете. (Метапакет — это пакет на основе платформы, который состоит только из зависимостей от других пакетов.) Это свойство также управляет неявными ссылками, такими как System и System.Core, если оно предназначено для использования на платформе .NET Framework.

Задайте для этого свойства значение, чтобы true отключить неявные элементы FrameworkReference или PackageReference. Если этому свойству присвоено значение true, можно добавить явные ссылки на только необходимые платформы или пакеты.

<PropertyGroup>
  <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
</PropertyGroup>

DisableTransitiveFrameworkReferenceDownloads

DisableTransitiveFrameworkReferenceDownloads Задайте свойство, чтобы true избежать загрузки дополнительных пакетов среды выполнения и целевых пакетов, на которые не ссылается проект напрямую.

<PropertyGroup>
  <DisableTransitiveFrameworkReferenceDownloads>true</DisableTransitiveFrameworkReferenceDownloads>
</PropertyGroup>

DisableTransitiveProjectReferences

Свойство DisableTransitiveProjectReferences управляет неявными ссылками на проекты. Задайте этому свойству значение true, чтобы отключить неявные элементы ProjectReference. Отключение неявных ссылок на проекты вызовет нетранзитивное поведение, аналогичное поведению в устаревшей системе проектов.

Задание этому свойству значения true аналогично заданию PrivateAssets="All" во всех зависимостях главного проекта.

Если этому свойству задано значение true, можно добавить явные ссылки на только необходимые проекты.

<PropertyGroup>
  <DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
</PropertyGroup>

ManagePackageVersionsCentrally

Свойство ManagePackageVersionsCentrally было введено в .NET 7. Задав его true в файле Directory.Packages.props в корне репозитория, вы можете управлять общими зависимостями в проектах из одного расположения. Добавьте версии для распространенных зависимостей пакетов с помощью PackageVersion элементов в файле Directory.Packages.props . Затем в отдельных файлах проекта можно опустить Version атрибуты из любых PackageReference элементов, ссылающихся на централизованно управляемые пакеты.

Пример файла Directory.Packages.props :

<PropertyGroup>
  <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
...
<ItemGroup>
  <PackageVersion Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
</ItemGroup>

Отдельный файл проекта:

<ItemGroup>
  <PackageReference Include="Microsoft.Extensions.Configuration" />
</ItemGroup>

Дополнительные сведения см. в разделе централизованного управления пакетами (CPM).

При восстановлении пакета, на который указывает ссылка, устанавливаются все его прямые зависимости и все зависимости этих зависимостей. Можно настроить восстановление пакетов, указав такие свойства, как RestorePackagesPath и RestoreIgnoreFailedSources. Дополнительные сведения об этих и других свойствах см. в разделе целевой объект восстановления.

<PropertyGroup>
  <RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>

UseMauiEssentials

UseMauiEssentials Задайте для свойства true объявление явной ссылки на проект или пакет, который зависит от MAUI Essentials. Этот параметр гарантирует, что проект извлекает правильную ссылку на известную платформу для MAUI Essentials. Если проект ссылается на проект, использующий MAUI Essentials, но этот параметр trueне задан, может возникнуть предупреждение о NETSDK1186сборке.

<PropertyGroup>
  <UseMauiEssentials>true</UseMauiEssentials>
</PropertyGroup>

ValidateExecutableReferencesMatchSelfContained

Свойство ValidateExecutableReferencesMatchSelfContained можно использовать для отключения ошибок, связанных с ссылками на исполняемый проект. Если .NET обнаруживает, что автономный исполняемый проект ссылается на зависящий от платформы исполняемый проект или наоборот, он создает ошибки NETSDK1150 и NETSDK1151 соответственно. Чтобы избежать этих ошибок при намеренном создании ссылки, присвойте свойству ValidateExecutableReferencesMatchSelfContained значение false.

<PropertyGroup>
  <ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
</PropertyGroup>

WindowsSdkPackageVersion

Свойство WindowsSdkPackageVersion можно использовать для переопределения версии пакета нацеливания Windows SDK. Это свойство было добавлено в .NET 5 и заменило элемент FrameworkReference для этой цели.

<PropertyGroup>
  <WindowsSdkPackageVersion>10.0.19041.18</WindowsSdkPackageVersion>
</PropertyGroup>

Примечание.

Не рекомендуется переопределять версию Windows SDK, так как пакеты нацеливания для Windows SDK включены в пакет SDK для .NET 5+. Вместо этого для ссылки на последний пакет Windows SDK обновите версию пакета SDK для .NET. Это свойство должно использоваться только в редких случаях, например при использовании предварительных версий пакетов или при необходимости переопределения версии C#/WinRT.

Следующие свойства используются для запуска приложения с помощью команды dotnet run:

RunArguments

Свойство RunArguments определяет аргументы, которые передаются в приложение при его запуске.

<PropertyGroup>
  <RunArguments>-mode dryrun</RunArguments>
</PropertyGroup>

Совет

Можно указать дополнительные аргументы для передачи в приложение с помощью параметра -- для dotnet run.

RunWorkingDirectory

Свойство RunWorkingDirectory определяет рабочий каталог для запуска процесса приложения. Это может быть абсолютный путь или путь относительно каталога проекта. Если каталог не указан, в качестве рабочего каталога используется OutDir.

<PropertyGroup>
  <RunWorkingDirectory>c:\temp</RunWorkingDirectory>
</PropertyGroup>

В этом разделе описаны следующие свойства MSBuild:

EnableComHosting

Свойство EnableComHosting указывает, что сборка предоставляет сервер COM. Установка EnableComHosting в true также подразумевает, что EnableDynamicLoading — true.

<PropertyGroup>
  <EnableComHosting>True</EnableComHosting>
</PropertyGroup>

Дополнительные сведения см. в разделе Предоставление компонентов .NET для COM.

EnableDynamicLoading

Свойство EnableDynamicLoading указывает, что сборка является динамически загружаемым компонентом. Компонентом может быть библиотека COM или библиотека, не относящаяся к COM, которую можно использовать из собственного узла или использовать как подключаемый модуль. Если присвоить этому свойству значения true:

  • Создается файл runtimeconfig.json.
  • Параметр RollForward имеет значение LatestMinor.
  • Ссылки NuGet копируются локально.
<PropertyGroup>
  <EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>

Свойства созданных файлов

Следующие свойства затрагивают код в созданных файлах:

DisableImplicitNamespaceImports

Это DisableImplicitNamespaceImports свойство можно использовать для отключения неявного импорта пространства имен в проектах Visual Basic, предназначенных для .NET 6 или более поздней версии. Неявные пространства имен — это пространства имен по умолчанию, которые импортируются глобально в проект Visual Basic. Задайте для этого свойства значение true, чтобы отключить импорт неявных пространств имен.

<PropertyGroup>
  <DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
</PropertyGroup>

ImplicitUsings

Свойство ImplicitUsings можно использовать для включения и отключения неявных директив global using в проектах C#, предназначенных для .NET 6 или более поздней версии, и C# 10 или более поздней версии. Если эта функция включена, пакет SDK для .NET добавляет директивы global using для набора пространств имен по умолчанию на основе типа пакета SDK для проекта. Задайте для этого свойства значение true или enable, чтобы включить неявные директивы global using. Чтобы отключить неявные директивы global using, удалите свойство или присвойте ему значение false или disable.

<PropertyGroup>
  <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

Примечание.

В шаблонах для новых проектов C#, предназначенных для .NET 6 или более поздней версии, ImplicitUsings имеет значение enable по умолчанию.

Чтобы определить явную директиву global using, добавьте элемент Using.

Товаров

Элементы MSBuild — это входные данные для системы сборки. Элементы указываются в соответствии с их типом, который является именем элемента. Например, Compile и Reference — два распространенных типа элементов. Пакет SDK для .NET предоставляет следующие дополнительные типы элементов:

Для этих элементов можно использовать любой из стандартных атрибутов элемента, например Include и Update. Чтобы добавить новый элемент, используйте Include. Для изменения существующего элемента используйте Update. Например, Update часто используется для изменения элемента, который неявно был добавлен пакетом SDK для .NET.

AssemblyMetadata

Элемент AssemblyMetadata указывает атрибут сборки пары "ключ-значение" AssemblyMetadataAttribute. Метаданные Include становятся ключом, а метаданные Value становятся значением.

<ItemGroup>
  <AssemblyMetadata Include="Serviceable" Value="True" />
</ItemGroup>

InternalsVisibleTo

Элемент InternalsVisibleTo создает атрибут сборки InternalsVisibleToAttribute для указанной дружественной сборки.

<ItemGroup>
  <InternalsVisibleTo Include="MyProject.Tests" />
</ItemGroup>

Если дружественная сборка подписана, можно указать дополнительные метаданные Key, чтобы указать его полный открытый ключ. Если не указать метаданные Key и доступен ключ $(PublicKey), используется этот ключ. В противном случае открытый ключ не добавляется к атрибуту.

FrameworkReference

Элемент FrameworkReference определяет ссылку на общую платформу .NET.

Атрибут Include задает идентификатор платформы.

Фрагмент файла проекта в следующем примере ссылается на общую платформу Microsoft.AspNetCore.App.

<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

PackageReference

Элемент PackageReference определяет ссылку на пакет NuGet.

Атрибут Include указывает идентификатор пакета. Атрибут Version указывает версию или диапазон версий. Сведения о том, как указать минимальную версию, максимальную версию, диапазон или точное соответствие, см. в разделе Диапазоны версий.

Фрагмент файла проекта в следующем примере ссылается на пакет System.Runtime.

<ItemGroup>
  <PackageReference Include="System.Runtime" Version="4.3.0" />
</ItemGroup>

Также можно управлять ресурсами зависимостей с помощью таких метаданных, как PrivateAssets.

<ItemGroup>
  <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
    <PrivateAssets>all</PrivateAssets>
  </PackageReference>
</ItemGroup>

Дополнительные сведения см. в статье Ссылки на пакеты в файлах проекта.

TrimmerRootAssembly

Элемент TrimmerRootAssembly позволяет исключить сборку из обрезки. Обрезка — это процесс удаления неиспользуемых частей среды выполнения из упакованного приложения. В некоторых случаях при обрезке могут неправильно удаляться необходимые ссылки.

Следующий код XML исключает сборку System.Security из обрезки.

<ItemGroup>
  <TrimmerRootAssembly Include="System.Security" />
</ItemGroup>

Дополнительные сведения: Параметры обрезки.

Использование

Элемент Using позволяет глобально включать пространство имен в проекте C#, поэтому не нужно добавлять директиву using для пространства имен в верхней части исходных файлов. Этот элемент аналогичен элементу Import, который можно использовать для тех же целей в проектах Visual Basic. Это свойство доступно с версии .NET 6.

<ItemGroup>
  <Using Include="My.Awesome.Namespace" />
</ItemGroup>

Можно также использовать элемент Using для определения глобальных директив using <alias> и using static <type>.

<ItemGroup>
  <Using Include="My.Awesome.Namespace" Alias="Awesome" />
</ItemGroup>

Например:

  • <Using Include="Microsoft.AspNetCore.Http.Results" Alias="Results" /> выдает global using Results = global::Microsoft.AspNetCore.Http.Results;
  • <Using Include="Microsoft.AspNetCore.Http.Results" Static="True" /> выдает global using static global::Microsoft.AspNetCore.Http.Results;

Дополнительные сведения см. в псевдонимахusing директив и using static <type> директив.

Метаданные элементов

Помимо стандартных атрибутов элемента MSBuild, в пакете SDK для .NET доступны следующие теги метаданных элементов:

CopyToPublishDirectory

Метаданные CopyToPublishDirectory в элементах управления MSBuild, когда элемент копируется в каталог публикации. Допустимые значения: PreserveNewest, при котором копируется только элемент, если он был изменен, Always, при котором всегда копируется элемент, и Never, при котором элемент никогда не копируется. С точки зрения производительности PreserveNewest предпочтительнее, поскольку включает инкрементную сборку.

<ItemGroup>
  <None Update="appsettings.Development.json" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>

LinkBase

Для элемента, находящегося за пределами каталога проекта и его подкаталогов, целевой объект публикации использует метаданные Link элемента, чтобы определить, куда копировать элемент. Link также определяет, как элементы за пределами дерева проекта отображаются в окне обозревателя решений Visual Studio.

Если для элемента, находящегося за пределами проекта, Link не указан, по умолчанию используется %(LinkBase)\%(RecursiveDir)%(Filename)%(Extension). LinkBase позволяет указать допустимую базовую папку для элементов за пределами проекта. Иерархия папок в базовой папке обеспечивается с помощью RecursiveDir. Если параметр LinkBase не указан, он опускается в пути Link.

<ItemGroup>
  <Content Include="..\Extras\**\*.cs" LinkBase="Shared"/>
</ItemGroup>

На следующем рисунке показано, как файл, который включен с помощью стандартной маски предыдущего элемента Include, отображается в обозревателе решений.

Solution Explorer showing item with LinkBase metadata.

См. также