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


команда `dotnet build` (построение проекта)

Эта статья относится к: ✔️ пакету SDK для .NET 6 и более поздних версий

Имя.

dotnet build — создает проект, решение или файловое приложение и все его зависимости.

Краткие сведения

dotnet build [<PROJECT>|<SOLUTION>|<FILE>] [-a|--arch <ARCHITECTURE>]
    [--artifacts-path <ARTIFACTS_DIR>]  [-bl|--binaryLogger:<FILE>]
    [-c|--configuration <CONFIGURATION>] [--disable-build-servers]
    [-f|--framework <FRAMEWORK>] [--force] [--interactive]
    [--no-dependencies] [--no-incremental] [--no-restore] [--nologo]
    [--no-self-contained] [-o|--output <OUTPUT_DIRECTORY>] [--os <OS>]
    [-p|--property:<PROPERTYNAME>=<VALUE>] [-r|--runtime <RUNTIME_IDENTIFIER>]
    [--sc|--self-contained] [--source <SOURCE>]
    [--tl:[auto|on|off]] [ --ucr|--use-current-runtime]
    [-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]

dotnet build -h|--help

Description

Команда dotnet build создает проект, решение или файловое приложение и его зависимости в набор двоичных файлов. Эти двоичные файлы содержат код проекта в виде файлов на промежуточном языке (IL) с расширением DLL. В зависимости от типа и параметров проекта могут быть включены другие файлы, например:

  • Исполняемый файл, который можно использовать для запуска приложения.
  • Файлы символов, используемые для отладки с помощью расширения PDB.
  • Файл .deps.json, в котором перечислены зависимости приложения или библиотеки.
  • Файл .runtimeconfig.json, определяющий общую среду выполнения и ее версию для приложения.
  • Другие библиотеки, от которых зависит проект (через ссылки на проект или ссылки на пакеты NuGet).

Для исполняемых проектов, предназначенных для .NET Core 3.0 и более поздних версий, зависимости библиотек копируются в выходную папку. Это означает, что если нет никакой другой логики для публикации (например, как у веб-проектов), выходные данные сборки можно развертывать.

Неявное восстановление

Для сборки нужен файл project.assets.json, содержащий список зависимостей приложения. Он создается при выполнении команды dotnet restore. В отсутствие файла ресурсов инструментарий не может разрешать доступ к ссылочным сборкам, что приводит к ошибкам.

Вам не нужно выполнять команду dotnet restore, так как она выполняется неявно всеми командами, которые требуют восстановления, например dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish и dotnet pack. Чтобы отключить неявное восстановление, используйте параметр --no-restore.

Команду dotnet restore по-прежнему удобно использовать в некоторых сценариях, где необходимо явное восстановление, например в сборках с использованием непрерывной интеграции в Azure DevOps Services или системах сборки, где требуется явно контролировать время восстановления.

Сведения об управлении веб-каналами NuGet см. в документации по dotnet restore.

Эта команда поддерживает параметры dotnet restore при передаче в длинной форме (например, --source). Параметры в краткой форме, например -s, не поддерживаются.

Выходные данные исполняемого файла или библиотеки

То, является ли проект исполняемым, определяется свойством <OutputType> в файле проекта. Следующий пример описывает проект, который создает исполняемый код:

<PropertyGroup>
  <OutputType>Exe</OutputType>
</PropertyGroup>

Чтобы создать библиотеку, опустите свойство <OutputType> или измените его значение на Library. Библиотека DLL на промежуточном языке не содержит ни одной точки входа, и ее нельзя выполнить.

MSBuild

dotnet build использует MSBuild для создания проекта, решения или файлового приложения. Он поддерживает параллельные и добавочные сборки. Дополнительные сведения см. в разделе Инкрементные сборки.

Помимо своих параметров, команда dotnet build принимает и параметры MSBuild, например -p для задания свойств или -l для определения средства ведения журнала. Дополнительные сведения об этих параметрах см. в справочнике по командной строке MSBuild. Либо же вы можете использовать команду dotnet msbuild.

Примечание.

При автоматическом запуске dotnet build с помощью dotnet run аргументы, подобные -property:property=value, не учитываются.

Выполнение dotnet build эквивалентно выполнению dotnet msbuild -restore; однако уровень детализации выходных данных по умолчанию отличается.

Скачивание манифестов рабочих нагрузок

При выполнении этой команды запускается асинхронное фоновое скачивание оповестительных манифестов для рабочих нагрузок. Если скачивание по-прежнему выполняется по завершении этой команды, оно останавливается. Дополнительные сведения см. в разделе Оповестительные манифесты.

Аргументы

PROJECT | SOLUTION | FILE

Файл проекта или решения или C# (файлового приложения) для работы. Если файл не указан, MSBuild ищет текущий каталог для проекта или решения.

  • PROJECT — это путь и имя файла файла проекта C#, F# или Visual Basic, или путь к каталогу, который содержит файл проекта C#, F# или Visual Basic.

  • SOLUTION — это путь и имя файла решения (.sln или расширение SLNX) или путь к каталогу, содержаму файл решения.

  • FILE — это аргумент, добавленный в .NET 10. Путь и имя файла приложения на основе файлов. Приложения на основе файлов содержатся в одном файле, который создается и запускается без соответствующего файла проекта (CSPROJ). Дополнительные сведения см. в разделе "Создание файловых приложений C#".

Параметры

  • -a|--arch <ARCHITECTURE>

    Указывает целевую архитектуру. Это сокращенный синтаксис для настройки идентификатора среды выполнения (RID), где указанное значение объединяется с RID по умолчанию. Например, если на компьютере win-x64 указать --arch x86, идентификатору RID присваивается значение win-x86. При использовании этого параметра не используйте параметр -r|--runtime. Этот параметр доступен с выпуска .NET 6, предварительная версия 7.

  • --artifacts-path <ARTIFACTS_DIR>

    Все выходные файлы сборки из выполняемой команды будут отправляться в вложенные папки в соответствии с указанным путем, разделенным проектом. Дополнительные сведения см. в разделе "Макет выходных данных артефактов". Доступно с пакета SDK для .NET 8.

  • -bl|--binaryLogger:<FILE>

    Включает двоичный средство ведения журнала и при необходимости задает имя выходного файла.
    Если имя файла не указано, значение по умолчанию находится msbuild.binlog в текущем каталоге.

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

    dotnet build -bl
    dotnet build -bl:build-log.binlog
    
  • -c|--configuration <CONFIGURATION>

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

  • --disable-build-servers

    Принудительно заставляет команду игнорировать все постоянные серверы сборки. Этот параметр предоставляет согласованный способ отключить все использование кэширования сборки, которая заставляет сборку с нуля. Сборка, которая не зависит от кэшей, полезна, когда кэши могут быть повреждены или неверны по какой-то причине. Доступно с пакета SDK для .NET 7.

  • -f|--framework <FRAMEWORK>

    Выполняет компиляцию для конкретной платформы. Платформа должна быть определена в файле проекта. Примеры: net7.0, net462.

  • --force

    Принудительное разрешение всех зависимостей, даже если последнее восстановление прошло успешно. Указание этого флага дает тот же результат, что удаление файла project.assets.json.

  • --interactive

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

  • --no-dependencies

    Межпроектные (P2P) ссылки игнорируются, и выполняется сборка только указанного корневого проекта.

  • --no-incremental

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

  • --no-restore

    Во время сборки не выполняется неявное восстановление.

  • --nologo

    Скрывает загрузочный баннер или сообщение об авторских правах.

  • --no-self-contained

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

  • -o|--output <OUTPUT_DIRECTORY>

    Каталог, в который будут помещаться собранные двоичные файлы. Если значение не указано, путь по умолчанию — ./bin/<configuration>/<framework>/. Для проектов с несколькими целевыми платформами (с помощью свойства TargetFrameworks) необходимо также определить --framework при указании этого параметра.

    • Пакет SDK для .NET 7.0.200 и более поздних версий

      Если указать --output параметр при выполнении этой команды в решении, интерфейс командной строки выдает предупреждение (ошибка в версии 7.0.200) из-за неясной семантики выходного пути. Этот --output параметр запрещен, так как все выходные данные всех встроенных проектов будут скопированы в указанный каталог, который не совместим с многоцелыми проектами, а также проектами с различными версиями прямых и транзитивных зависимостей. Дополнительные сведения см. в разделе "Параметр уровня --output решения" больше недействителен для команд, связанных со сборкой.

  • --os <OS>

    Позволяет указать целевую операционную систему. Это сокращенный синтаксис для настройки идентификатора среды выполнения (RID), где указанное значение объединяется с RID по умолчанию. Например, если на компьютере win-x64 указать --os linux, идентификатору RID присваивается значение linux-x64. При использовании этого параметра не используйте параметр -r|--runtime. Доступно с .NET 6.

  • -p|--property:<PROPERTYNAME>=<VALUE>

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

    --property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2>
    --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
    
  • -r|--runtime <RUNTIME_IDENTIFIER>

    Указывает целевую среду выполнения. Список идентификаторов сред выполнения (RID) см. в каталоге RID. При использовании этого параметра с пакетом SDK для .NET 6 используйте также --self-contained или --no-self-contained. Если он не указан, по умолчанию используется сборка для текущей ОС и архитектуры.

  • --sc|--self-contained

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

  • --source <SOURCE>

    URI источника пакета NuGet для использования во время операции восстановления.

  • --tl:[auto|on|off]

    Указывает, следует ли использовать средство ведения журнала терминала для выходных данных сборки. Значением по умолчанию является autoто, что сначала проверяет среду перед включением ведения журнала терминалов. Проверка среды проверяет, что терминал может использовать современные выходные функции и не использует перенаправленные стандартные выходные данные перед включением нового средства ведения журнала. on пропускает проверку среды и включает ведение журнала терминалов. off пропускает проверку среды и использует средство ведения журнала консоли по умолчанию.

    Средство ведения журнала терминала показывает этап восстановления, за которым следует этап сборки. На каждом этапе в нижней части терминала отображаются строительные проекты. Каждый проект, который создает выходные данные как целевого объекта MSBuild, который в настоящее время создается, так и время, затраченное на этот целевой объект. Эти сведения можно найти, чтобы узнать больше о сборке. После завершения сборки проекта записывается один раздел "сборка завершена", который записывает:

    • Имя созданного проекта.
    • Целевая платформа (если она используется с несколькими целевыми объектами).
    • Состояние этой сборки.
    • Основные выходные данные этой сборки (которая гиперссылок).
    • Все диагностика, созданные для этого проекта.

    Этот параметр доступен начиная с .NET 8.

  • --ucr|--use-current-runtime

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

  • -v|--verbosity <LEVEL>

    Задает уровень детализации команды. Допустимые значения: q[uiet], m[inimal], n[ormal], d[etailed] и diag[nostic]. Дополнительные сведения см. в разделе LoggerVerbosity.

  • --version-suffix <VERSION_SUFFIX>

    Задает значение свойства $(VersionSuffix), которое используется при сборке проекта. Работает, только если свойство $(Version) не задано. После этого параметру $(Version) присваиваются значения $(VersionPrefix) и $(VersionSuffix), разделенные дефисом.

  • -?|-h|--help

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

Примеры

  • Сборка проекта и его зависимостей:

    dotnet build
    
  • Создайте файловое приложение:

    dotnet build MyProject.cs
    

    Поддержка приложений на основе файлов добавлена в пакет SDK для .NET 10.0.100.

  • Сборка проекта и его зависимостей с помощью конфигурации Release:

    dotnet build --configuration Release
    
  • Создание проекта и его зависимостей для определенной среды выполнения (в этом примере Linux):

    dotnet build --runtime linux-x64
    
  • Выполните сборку проекта и используйте указанный источник пакета NuGet во время операции восстановления.

    dotnet build --source c:\packages\mypackages
    
  • Выполните сборку проекта и задайте версию 1.2.3.4 для сборки с помощью параметра -pMSBuild.

    dotnet build -p:Version=1.2.3.4