Справочник по MSBuild для проектов пакета SDK для .NET
Эта страница содержит справочные сведения о свойствах и элементах MSBuild, которые вы можете использовать для настройки проектов .NET.
Примечание.
Работа над этой страницей еще не завершена, поэтому здесь приведены лишь некоторые полезные свойства MSBuild для пакета SDK для .NET. Список стандартных свойств см. в статье Общие свойства MSBuild.
Свойства проверки сборки
Эти свойства и элементы передаются в ValidateAssemblies
задачу. Дополнительные сведения о проверке сборки см. в разделе "Проверка сборки".
В этом разделе описаны следующие свойства MSBuild:
Примечание.
Эти свойства не являются частью пакета SDK для .NET (пока). Чтобы использовать их, необходимо также добавить в PackageReference
задачу Microsoft.DotNet.ApiCompat.Task.
Кроме того, следующие свойства, описанные в свойствах проверки пакета, также применяются к проверке сборки:
- ApiCompatEnableRuleAttributesMustMatch
- ApiCompatEnableRuleCannotChangeParameterName
- ApiCompatExcludeAttributesFile
- ApiCompatGenerateSuppressionFile
- ApiCompatPermitUnnecesarySuppressions
- ApiCompatPreserveUnnecesarySuppressions
- ApiCompatRespectInternals
- ApiCompatSuppressionFile
- ApiCompatSuppressionOutputFile
- NoWarn
- RoslynAssembliesPath
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_SOLUTIONS
true
среды значение (или любое другое значение). Для решений, имеющих множество проектов, установка этой переменной увеличивает время, необходимое для упаковки.
Свойства проверки пакета
Эти свойства и элементы передаются в ValidatePackage
задачу. Дополнительные сведения о проверке пакета см. в обзоре проверки пакетов.
Свойства задачи см. в разделе "Свойства проверки сборкиValidateAssemblies
".
В этом разделе описаны следующие свойства и элементы MSBuild:
- ApiCompatEnableRuleAttributesMustMatch
- ApiCompatEnableRuleCannotChangeParameterName
- ApiCompatExcludeAttributesFile
- ApiCompatGenerateSuppressionFile
- ApiCompatPermitUnnecesarySuppressions
- ApiCompatPreserveUnnecesarySuppressions
- ApiCompatRespectInternals
- ApiCompatSuppressionFile
- ApiCompatSuppressionOutputFile
- EnablePackageValidation
- EnableStrictModeForBaselineValidation
- EnableStrictModeForCompatibleFrameworksInPackage
- EnableStrictModeForCompatibleTfms
- NoWarn
- PackageValidationBaselineFrameworkToIgnore
- PackageValidationBaselineName
- PackageValidationBaselineVersion
- PackageValidationReferencePath
- RoslynAssembliesPath
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:
- AppendRuntimeIdentifierToOutputPath
- AppendTargetFrameworkToOutputPath
- CopyLocalLockFileAssemblies
- ErrorOnDuplicatePublishOutputFiles
- GenerateRuntimeConfigDevFile
- GenerateRuntimeConfigurationFiles
- GenerateSatelliteAssembliesForCore
- IsPublishable
- PreserveCompilationContext
- PreserveCompilationReferences
- ProduceReferenceAssemblyInOutDir
- PublishDocumentationFile
- PublishDocumentationFiles
- PublishReferencesDocumentationFiles
- PublishRelease
- PublishSelfContained
- RollForward
- RuntimeFrameworkVersion
- RuntimeIdentifier
- RuntimeIdentifiers
- SatelliteResourceLanguages
- SelfContained
- UseAppHost
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-x64
bin\Debug\net5.0
:
<PropertyGroup>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
CopyLocalLockFileAssemblies
Свойство CopyLocalLockFileAssemblies
полезно для проектов подключаемых модулей, которые имеют зависимости от других библиотек. Если для этого свойства true
задано значение, все транзитивные зависимости пакета NuGet копируются в выходной каталог. Это означает, что вы можете использовать выходные данные dotnet build
для запуска подключаемого модуля на любом компьютере.
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
Значение CopyLocalLockFileAssemblies
по умолчанию может отличаться в зависимости от типа вывода. Например, для библиотек классов значение по умолчанию равно, а для консольных приложений используется false
true
значение по умолчанию. Это свойство можно указать явным образом, чтобы переопределить значение по умолчанию при необходимости.
Совет
Кроме того, можно использовать 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 может оказаться выгодным в следующих ситуациях:
- вы хотите использовать параметр
deterministic
в компиляторе C#; - вам мешает то, что al.exe не поддерживает публичное подписывание и плохо обрабатывает AssemblyInformationalVersionAttribute.
<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
Если это свойство, true
XML-файлы документации для ссылок проекта копируются в каталог публикации, а не просто ресурсы во время выполнения, такие как 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_SOLUTIONS
true
среды значение (или любое другое значение). Если эта переменная включена при публикации решения, приоритет отдается значению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:
- ContinuousIntegrationBuild
- CopyDebugSymbolFilesFromPackages
- CopyDocumentationFilesFromPackages
- DisableImplicitFrameworkDefines
- DocumentationFile
- EmbeddedResourceUseDependentUponConvention
- EnablePreviewFeatures
- EnableWindowsTargeting
- GenerateDocumentationFile
- GenerateRequiresPreviewFeaturesAttribute
- OptimizeImplicitlyTriggeredBuild
- DisableRuntimeMarshalling
Параметры компилятора 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:
- DefaultItemExcludesInProjectFolder
- DefaultItemExcludes
- EnableDefaultCompileItems
- EnableDefaultEmbeddedResourceItems
- EnableDefaultItems
- EnableDefaultNoneItems
Дополнительные сведения см. в разделе Включения и исключения по умолчанию.
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<Категория>
- AnalysisMode
- AnalysisMode<Категория>
- CodeAnalysisTreatWarningsAsErrors
- EnableNETAnalyzers
- EnforceCodeStyleInBuild
- _SkipUpgradeNetAnalyzersNuGetWarning
AnalysisLevel
Свойство AnalysisLevel
позволяет указать набор выполняемых анализаторов кода в соответствии с выпуском .NET. В каждом выпуске .NET, начиная с .NET 5, есть набор правил анализа кода. Правила из этого набора, которые включены по умолчанию для этого выпуска, будут применяться для анализа кода. Например, при обновлении до .NET 8, но не требуется изменять набор правил анализа кода по умолчанию.AnalysisLevel
7
<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, если задано значение EnforceCodeStyleInBuild
true
, это свойство влияет на правила стиля кода (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 |
Все правила включены в качестве предупреждений сборки*. Вы можете выборочно отказаться от отдельных правил, чтобы отключить их. * Следующие правила не включены с помощью параметров All AnalysisMode или параметров AnalysisLevel latest-all : CA1017, CA1045, CA1005, CA1014, CA1060, CA1021 и правил анализатора метрик кода (CA1501, CA1502, CA1505, CA1506 и CA1509). Эти устаревшие правила могут быть устаревшими в будущей версии. Однако их можно включить по отдельности dotnet_diagnostic.CAxxxx.severity = <severity> с помощью записи. |
Примечание.
- Начиная с .NET 6, если задано значение EnforceCodeStyleInBuild
true
, это свойство влияет на правила стиля кода (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
- ConcurrentGarbageCollection
- InvariantGlobalization
- PredefinedCulturesOnly
- RetainVMGarbageCollection
- ServerGarbageCollection
- ThreadPoolMaxThreads
- ThreadPoolMinThreads
- TieredCompilation
- TieredCompilationQuickJit
- TieredCompilationQuickJitForLoops
- TieredPGO
- UseWindowsThreadPool
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
- DisableImplicitFrameworkReferences
- DisableTransitiveFrameworkReferenceDownloads
- DisableTransitiveProjectReferences
- ManagePackageVersionsCentrally
- Свойства, связанные с восстановлением
- UseMauiEssentials
- ValidateExecutableReferencesMatchSelfContained
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:
- IsTestProject
- IsTestingPlatformApplication
- Enable[NugetPackageNameWithoutDots]
- EnableAspireTesting
- EnablePlaywright
- EnableMSTestRunner
- EnableNUnitRunner
- GenerateTestingPlatformEntryPoint
- TestingPlatformCaptureOutput
- TestingPlatformCommandLineArguments
- TestingPlatformDotnetTestSupport
- TestingPlatformShowTestsFailure
- TestingExtensionsProfile
- UseVSTest
IsTestProject
Свойство IsTestProject
означает, что проект является тестируемым проектом. Если для этого свойства задано true
значение , проверка, чтобы проверить, ссылается ли проект на автономный исполняемый файл. Это связано с тем, что тестовые проекты имеют но OutputType
Exe
обычно вызывают API в ссылаемом исполняемом файле, а не пытается запустить. Кроме того, если проект ссылается на проект, для которого IsTestProject
задано значение true
, тестовый проект не проверяется как ссылка на исполняемый файл.
Это свойство в основном необходимо для dotnet test
сценария и не влияет на использование vstest.console.exe.
Примечание.
Если проект задает пакет SDK MSTest, вам не нужно задавать это свойство. Он устанавливается автоматически. Аналогичным образом это свойство устанавливается автоматически для проектов, ссылающихся на пакет NuGet Microsoft.NET.Test.Sdk, связанный с VSTest.
IsTestingPlatformApplication
Если проект ссылается на пакет Microsoft.Testing.Platform.MSBuild, установите значение true
IsTestingPlatformApplication
(которое также является значением по умолчанию, если не указано) выполняет следующие действия:
- Создает точку входа в тестовый проект.
- Создает файл конфигурации.
- Обнаруживает расширения.
Задание свойства для false
отключения транзитивной зависимости для пакета. Транзитивная зависимость заключается в том, что проект, ссылающийся на другой проект, который ссылается на данный пакет, ведет себя так, как если он ссылается на пакет. Обычно это свойство задано в проекте, отличном от тестирования, который ссылается false
на тестовый проект. Дополнительные сведения см. в разделе об ошибке CS8892.
Если тестовый проект ссылается на MSTest, NUnit или xUnit, это свойство имеет то же значение, что и EnableMSTestRunner, EnableNUnitRunner или UseMicrosoftTestingPlatformRunner
(для xUnit).
Enable[NugetPackageNameWithoutDots]
Используйте свойство с шаблоном Enable[NugetPackageNameWithoutDots]
, чтобы включить или отключить расширения Microsoft.Testing.Platform.
Например, чтобы включить расширение аварийного дампа (пакет NuGet Microsoft.Testing.Extensions.CrashDump), задайте для true
параметра EnableMicrosoftTestingExtensionsCrashDump
значение .
Дополнительные сведения см. в разделе "Включение или отключение расширений".
EnableAspireTesting
При использовании пакета SDK для проекта MSTest можно использовать EnableAspireTesting
свойство для внедрения всех зависимостей и директив по умолчанию using
, необходимых для тестирования с помощью Aspire
и MSTest
. Это свойство доступно в MSTest 3.4 и более поздних версиях.
Дополнительные сведения см. в статье Test with .NET Aspire.
EnablePlaywright
При использовании пакета SDK для проекта MSTest можно использовать EnablePlaywright
свойство для внедрения всех зависимостей и директив по умолчанию using
, необходимых для тестирования с помощью Playwright
и MSTest
. Это свойство доступно в MSTest 3.4 и более поздних версиях.
Дополнительные сведения см. в статье "Драматург".
EnableMSTestRunner
Свойство EnableMSTestRunner
включает или отключает использование средства выполнения MSTest. Средство выполнения MSTest — это упрощенная и переносимая альтернатива VSTest. Это свойство доступно в MSTest 3.2 и более поздних версиях.
Примечание.
Если проект задает пакет SDK MSTest, вам не нужно задавать это свойство. Он устанавливается автоматически.
EnableNUnitRunner
Свойство EnableNUnitRunner
включает или отключает использование средства выполнения NUnit. Средство выполнения NUnit — это упрощенная и переносимая альтернатива VSTest. Это свойство доступно в NUnit3TestAdapter версии 5.0 и более поздних версий.
GenerateTestingPlatformEntryPoint
GenerateTestingPlatformEntryPoint
Задание свойства для false
отключения автоматического создания точки входа программы в тестовом проекте MSTest, NUnit или xUnit. Это свойство false
может потребоваться задать, если вы вручную определяете точку входа или при ссылке на тестовый проект из исполняемого файла, который также имеет точку входа.
Дополнительные сведения см. в разделе об ошибке CS8892.
Чтобы управлять созданием точки входа в проекте VSTest, используйте GenerateProgramFile
это свойство.
TestingPlatformCaptureOutput
Свойство TestingPlatformCaptureOutput
определяет, фиксируются ли все выходные данные консоли, записываемые тестируемым исполняемым файлом, и скрыты от пользователя при выполнении dotnet test
Microsoft.Testing.Platform
тестов. По умолчанию выходные данные консоли скрыты. Эти выходные данные включают баннер, сведения о версии и отформатированные сведения о тесте. Задайте для этого свойства отображение false
этих сведений вместе с выходными данными MSBuild.
Дополнительные сведения см. в разделе "Показать полные выходные данные платформы".
TestingPlatformCommandLineArguments
Свойство TestingPlatformCaptureOutput
позволяет указать аргументы командной строки для тестового приложения при выполнении dotnet test
Microsoft.Testing.Platform
тестов. В следующем фрагменте файла проекта показан пример.
<PropertyGroup>
...
<TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>
TestingPlatformDotnetTestSupport
Свойство TestingPlatformDotnetTestSupport
позволяет указать, используется ли VSTest при выполнении dotnet test
тестов. Если для этого свойства задано значение true
, VSTest отключен и все Microsoft.Testing.Platform
тесты выполняются напрямую.
Если у вас есть решение, содержащее тестовые проекты VSTest, а также проекты MSTest, NUnit или XUnit, необходимо выполнить один вызов для каждого режима (т dotnet test
. е. не будет выполнять тесты из VSTest и более новых платформ в одном вызове).
TestingPlatformShowTestsFailure
Свойство TestingPlatformShowTestsFailure
позволяет контролировать, сообщается ли один сбой или все ошибки в тестовом тесте сбоем при выполнении dotnet test
тестов. По умолчанию тестовые сбои суммируются в файл .log , а в MSBuild сообщается один сбой для каждого тестового проекта. Чтобы отобразить ошибки для каждого неудачного теста, задайте для этого свойства true
значение в файле проекта.
TestingExtensionsProfile
При использовании пакета SDKTestingExtensionsProfile
проекта MSTest свойство позволяет выбрать профиль для использования. В следующей таблице показаны допустимые значения.
значение | Описание |
---|---|
Default |
Включает рекомендуемые расширения для этой версии MSTest.SDK. |
None |
Расширения не включены. |
AllMicrosoft |
Включите все расширения, отправленные корпорацией Майкрософт (включая расширения с ограничивающей лицензией). |
Дополнительные сведения см. в профиле runner MSTest.
UseVSTest
UseVSTest
При использовании пакета SDK проекта MSTest задайте для свойства переключение true
с средства выполнения MSTest на средство выполнения VSTest.
Свойства, связанные с размещением
В этом разделе описаны следующие свойства MSBuild:
AppHostDotNetSearch
Свойство AppHostDotNetSearch
настраивает, как собственный исполняемый файл, созданный для приложения, будет искать установку .NET. Это свойство влияет только на исполняемый файл, созданный при публикации, а не на сборку.
<PropertyGroup>
<AppHostDotNetSearch>Global</AppHostDotNetSearch>
</PropertyGroup>
В следующей таблице перечислены допустимые значения. Можно указать несколько значений, разделенных точкой с запятой.
Значение | Значение |
---|---|
AppLocal |
Папка исполняемого файла приложения |
AppRelative |
Путь относительно исполняемого файла приложения, указанного AppHostRelativeDotNet |
EnvironmentVariables |
DOTNET_ROOT[_<arch>] Значение переменных среды |
Global |
Зарегистрированные и стандартные расположения глобальной установки |
Это свойство было введено в .NET 9.
AppHostRelativeDotNet
Свойство AppHostRelativeDotNet
позволяет указать относительный путь для исполняемого файла приложения, чтобы найти установку .NET при настройке этого. AppHostRelativeDotNet
Установка свойства подразумевает, что AppHostDotNetSearch
это AppRelative
. Это свойство влияет только на исполняемый файл, созданный при публикации, а не на сборку.
<PropertyGroup>
<AppHostRelativeDotNet>./relative/path/to/runtime</AppHostRelativeDotNet>
</PropertyGroup>
Это свойство было введено в .NET 9.
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 предоставляет следующие дополнительные типы элементов:
- Метаданные AssemblyMetadata
- InternalsVisibleTo
- PackageReference
- TrimmerRootAssembly
- Если использовать метод
Для этих элементов можно использовать любой из стандартных атрибутов элемента, например 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
, отображается в обозревателе решений.