Прочитать на английском

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


dotnet build

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

Имя.

dotnet build — собирает проект и все его зависимости.

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

Интерфейс командной строки.NET
dotnet build [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
    [--artifacts-path <ARTIFACTS_DIR>]
    [-c|--configuration <CONFIGURATION>] [-f|--framework <FRAMEWORK>]
    [--disable-build-servers]
    [--force] [--interactive] [--no-dependencies] [--no-incremental]
    [--no-restore] [--nologo] [--no-self-contained] [--os <OS>]
    [-o|--output <OUTPUT_DIRECTORY>]
    [-p|--property:<PROPERTYNAME>=<VALUE>]
    [-r|--runtime <RUNTIME_IDENTIFIER>]
    [--self-contained [true|false]] [--source <SOURCE>]
    [--tl:[auto|on|off]] [--use-current-runtime, --ucr [true|false]]
    [-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]

dotnet build -h|--help

Description

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

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

Для исполняемых проектов, предназначенных для более ранних версий, чем .NET Core 3.0, зависимости библиотек от NuGet обычно НЕ копируются в выходную папку. Они разрешаются из папки глобальных пакетов NuGet во время выполнения. Учитывая это, продукт dotnet build не готов к переносу на другой компьютер для выполнения. Чтобы создать версию приложения, которая может быть развернута, необходимо опубликовать ее (например, с помощью команды dotnet publish). Дополнительные сведения см. в статье Развертывание приложений .NET.

Для исполняемых проектов, предназначенных для .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> в файле проекта. Следующий пример описывает проект, который создает исполняемый код:

XML
<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

Файл проекта или решения для сборки. Если файл проекта или решения не указан, MSBuild ищет текущий рабочий каталог для файла с расширением, которое заканчивается либо на proj, либо на sln, и использует этот файл.

Параметры

  • -a|--arch <ARCHITECTURE>

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

  • --artifacts-path <ARTIFACTS_DIR>

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

  • -c|--configuration <CONFIGURATION>

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

  • --disable-build-servers

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

  • -f|--framework <FRAMEWORK>

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

  • --force

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

  • -?|-h|--help

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

  • --interactive

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

  • --no-dependencies

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

  • --no-incremental

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

  • --no-restore

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

  • --nologo

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

  • --no-self-contained

    Публикует приложение как зависимое от платформы приложение. Для запуска приложения на целевом компьютере должна быть установлена совместимая среда выполнения .NET. Доступно начиная с пакета SDK для .NET 6.

  • -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 или несколько. Укажите несколько свойств, разделяя их точкой с запятой, или укажите их путем повтора команды.

    Интерфейс командной строки.NET
    --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. Если он не указан, по умолчанию используется сборка для текущей ОС и архитектуры.

  • --self-contained [true|false]

    Публикует среду выполнения .NET вместе с приложением, что позволяет не устанавливать ее на целевом компьютере. Если указан идентификатор среды выполнения, значение по умолчанию равно true. Доступно с .NET 6.

  • --source <SOURCE>

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

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

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

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

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

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

  • -v|--verbosity <LEVEL>

    Задает уровень детализации команды. Допустимые значения: q[uiet], m[inimal], n[ormal], d[etailed] и diag[nostic]. Значение по умолчанию — minimal. По умолчанию MSBuild отображает предупреждения и ошибки на всех уровнях детализации. Чтобы исключить предупреждения, используйте /property:WarningLevel=0. Дополнительные сведения см. в разделе LoggerVerbosity и WarningLevel.

  • --use-current-runtime, --ucr [true|false]

    RuntimeIdentifier Задает переносимую RuntimeIdentifier платформу на основе одного из компьютеров. Это происходит неявно с свойствами, которые требуютRuntimeIdentifier, например SelfContained, , PublishAotPublishSelfContained, PublishSingleFileи PublishReadyToRun. Если для свойства задано значение false, это неявное разрешение больше не будет происходить.

  • --version-suffix <VERSION_SUFFIX>

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

Примеры

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

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

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

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

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

    Интерфейс командной строки.NET
    dotnet build -p:Version=1.2.3.4