dotnet run - команда для запуска приложения

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

Имя.

dotnet run — выполняет исходный код без дополнительных явных команд компиляции или запуска.

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

dotnet run [<applicationArguments>]
  [-a|--arch <ARCHITECTURE>] [--artifacts-path <ARTIFACTS_DIR>]
  [-c|--configuration <CONFIGURATION>] [--disable-build-servers]
  [-e|--environment <KEY=VALUE>] [--file <FILE_PATH>]
  [-f|--framework <FRAMEWORK>] [--force] [--interactive]
  [-lp|--launch-profile <NAME>] [--no-build] [--no-cache]
  [--no-dependencies] [--no-launch-profile] [--no-restore] [--os <OS>]
  [-p|--property:<PROPERTYNAME>=<VALUE>]
  [--project <PATH>] [-r|--runtime <RUNTIME_IDENTIFIER>]
  [--sc|--self-contained] [--tl:[auto|on|off]] [-v|--verbosity <LEVEL>]
  [[--] [application arguments]]

dotnet run -h|--help

Description

dotnet run — это удобное средство для запуска приложения из исходного кода одной командой. Это полезно для быстрой последовательной разработки из командной строки. В отношении сборки кода эта команда зависима от команды dotnet build. Все требования к сборке применяются dotnet run и к.

Выходные файлы записываются в расположение по умолчанию, которым является bin/<configuration>/<target>. Например, если у вас есть приложение netcoreapp2.1 и вы запускаете dotnet run, выходные данные помещаются в bin/Debug/netcoreapp2.1. При необходимости файлы перезаписываются. Временные файлы помещаются в каталог obj.

Когда в проекте задано несколько платформ, выполнение dotnet run приводит к ошибке, если только для указания платформы не используется параметр -f|--framework <FRAMEWORK>.

Команда dotnet run используется в контексте проектов, а не созданных сборок. Если вместо этого вы пытаетесь запустить библиотеку DLL платформозависимого приложения, следует использовать dotnet без команды. Например, для выполнения myapp.dll используйте:

dotnet myapp.dll

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

Для запуска приложения команда dotnet run разрешает зависимости приложения, выходящие за пределы общей среды выполнения, из кэша NuGet. Из-за использования кэшированных зависимостей не рекомендуется применять команду dotnet run для запуска приложений в рабочей среде. Вместо этого создайте развертывание с помощью команды dotnet publish и разверните опубликованные выходные данные.

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

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

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

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

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

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

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

Профили запуска

Профили запуска настраивают запуск dotnet run приложения во время разработки. Для проекта в стиле ПАКЕТА SDK введите параметры Properties/launchSettings.json. вместо этого используются My Project/launchSettings.json проекты Visual Basic.

Приложения на основе файлов могут использовать файл рядом [ApplicationName].run.json с исходным файлом. Порядок поиска файлов и примеры см. в профилях запуска для приложений на основе файлов.

Файл параметров запуска содержит объект верхнего уровня profiles . Каждое свойство в profiles определении именованного профиля:

{
  "profiles": {
    "Local": {
      "commandName": "Project",
      "commandLineArgs": "--input sample.txt",
      "dotnetRunMessages": true,
      "environmentVariables": {
        "APP_MODE": "local"
      }
    }
  }
}

Средство синтаксического анализа параметров запуска пакета SDK .NET принимает комментарии JSON и конечные запятые.

Выбор профиля

Используется --launch-profile <NAME> для выбора именованного профиля. Совпадение имен не учитывает регистр. Имена профилей, которые отличаются только по регистру, являются неоднозначными и создают ошибку.

Если имя не указано, выберите первый профиль в порядке файла, dotnet run который commandName он поддерживает. Используйте --no-launch-profile для пропуска файла параметров запуска.

При dotnet run применении профиля он задает DOTNET_LAUNCH_PROFILE выбранное имя профиля в запущенном процессе. Более поздний источник переменной среды может переопределить значение.

Поддерживаемые типы профилей

Пакет SDK .NET поддерживает эти commandName значения для dotnet run. Значения чувствительны к регистру.

commandName Behavior
Project Создает проект и запускает команду, созданную проектом.
Executable Запускает команду, указанную в параметре executablePath. Если вы не укажете --no-build, dotnet run по-прежнему создает проект первым.

Общие свойства

dotnet run Распознает эти свойства для обоих поддерживаемых типов профилей:

dotnet run %NAME% расширяет ссылки на переменные среды в поддерживаемых строковых значениях. В .NET 11 и более поздних версиях также расширяет ссылки на свойства MSBuild в значениях, которые он использует для запуска процесса, используя ту же замену маркера, что и Visual Studio. Он не расширяет ссылки в стиле $NAME оболочки.

Property Behavior
commandLineArgs Задает аргументы для запущенного процесса. Явные аргументы приложения в командной строке имеют приоритет. Для профиля аргументы, предоставленные Project project также имеют приоритет.
environmentVariables Задает переменные среды для запущенного процесса. Значения профиля переопределяют унаследованные переменные среды, созданные пакетом SDK, и -e\|--environment значения переопределяют значения профиля.
dotnetRunMessages При trueпечати Building... перед dotnet run сборкой проекта. Значение по умолчанию — false. Это свойство не управляет сообщением, определяющим файл параметров запуска.

Используется environmentVariables для применения параметров конфигурации среды выполнения во время разработки, имеющих форму переменной среды. Например, профиль может задать параметры GC, DOTNET_gcServerнапример. Доступные параметры, имена переменных среды и правила приоритета см. в разделе .NET параметры конфигурации среды выполнения и параметры конфигурации среды выполнения для сборки мусора.

Не каждый параметр среды выполнения имеет форму переменной среды. Чтобы настроить приложение независимо от профиля запуска, используйте свойство RuntimeHostConfigurationOption ИЛИ элемент MSBuild в проекте или используйте runtimeconfig.template.json файл. Некоторые параметры также можно изменить в коде с AppContext.SetSwitchпомощью . Эти механизмы создают или изменяют конфигурацию среды выполнения приложения; они не являются дополнительными launchSettings.json свойствами.

Project Свойства

dotnet run распознает эти дополнительные свойства, если commandName это Project:

Property Behavior
applicationUrl Задает ASPNETCORE_URLS в запущенном процессе. Значение ASPNETCORE_URLS в environmentVariables или из -e\|--environment нее имеет приоритет.
launchBrowser Указывает, следует ли открывать браузер. dotnet run сохраняет это свойство в проанализированном профиле, но не открывает браузер.
launchUrl Сообщает средству запуска, какой URL-адрес нужно открыть. dotnet run сохраняет это свойство в проанализированном профиле, но не открывает браузер или не использует URL-адрес.

Поведение applicationUrl поддерживает ASP.NET Core, но профили запуска и другие распространенные свойства применяются к любому выполняемому проекту пакета SDK .NET.

Executable Свойства

dotnet run распознает эти дополнительные свойства, если commandName это Executable:

Property Behavior
executablePath Required. Указывает процесс, который нужно запустить. Пакет SDK расширяет поддерживаемые ссылки на переменные, но не разрешает относительное значение для файла параметров запуска. Используйте абсолютный путь или команду, которую может найти операционная система.
workingDirectory Optional. Указывает рабочий каталог для запущенного процесса. Пакет SDK расширяет поддерживаемые ссылки на переменные и разрешает относительный путь к каталогу, который содержит файл параметров запуска. Если опустить свойство, рабочий каталог по умолчанию использует каталог, содержащий проект или файловое приложение.

Visual Studio и расширения отладчика

launchSettings.json — это общий формат входных данных, но каждый потребитель решает, какие значения следует поддерживать и как их интерпретировать. Visual Studio, отладчики и другие средства могут распознавать больше commandName значений и свойств, чемdotnet run.

В следующей таблице сравнивается dotnet run контракт с общим поведением системы проекта .NET в Visual Studio:

Настройка или поведение dotnet run Visual Studio
Поддерживаемые типы профилей Поддерживает Project и Executable. Поддерживает Projectи Executableпустую commandName. Установленные расширения системы проекта могут добавлять другие типы профилей.
Расширение переменной %NAME% Расширяет ссылки на переменные среды. В .NET 11 и более поздних версиях также расширяет ссылки на свойства MSBuild в значениях, которые он использует для запуска процесса. Расширяет переменные среды и свойства MSBuild в executablePath, commandLineArgs, workingDirectorylaunchUrl, значения переменных среды и параметры расширения с строковым значением.
commandLineArgs для Project Использует значение профиля, только если проект не предоставляет аргументы выполнения и не передает аргументы приложения в командной строке. Добавляет значение профиля к аргументам запуска из проекта.
workingDirectory для Project Игнорирует свойство. Поддерживает свойство. Относительный путь относится к каталогу проекта.
workingDirectory для Executable Относительный путь относительно каталога, содержащего файл параметров запуска. Если опущен, путь по умолчанию используется в каталоге приложений на основе проекта или файлов. Относительный путь относится к каталогу проекта. Если опущен, путь по умолчанию используется для выходного каталога, если этот каталог существует, или в каталог проекта в противном случае.
Относительный executablePath Передает значение операционной системе без повторной ее балансировки. Разрешает значение с компонентами пути из рабочего каталога профиля. Для имени исполняемого файла Visual Studio проверяет собственный текущий каталог, а затем PATH.
launchBrowser и launchUrl. Сохраняет значения в профилю синтаксического анализа, но не открывает браузер. Делает значения доступными поставщику запуска. Например, ASP.NET Core средства могут открыть браузер.
applicationUrl Наборы ASPNETCORE_URLS. Делает значение доступным для установленных поставщиков запуска, таких как ASP.NET Core инструментов.
dotnetRunMessages Управляет сообщением Building... . Не используется свойство для управления выходными данными Visual Studio.
Свойства отладчика Игнорирует свойства, относящиеся к отладчику. Использует такие свойства, как nativeDebugging, sqlDebugging, remoteDebugEnabledjsWebView2Debuggingи hotReloadEnabled когда проект и отладчик поддерживают функцию.

В .NET 11 и более поздних версиях оба потребителя расширяются"$(ProjectDir)". В более ранних версиях ни одно workingDirectory значение не определяет каталог проекта для обоих потребителей. Visual Studio расширяется"$(ProjectDir)", а dotnet run обрабатывает его как литеральный текст и разрешает относительные пути из каталога, содержащего файл параметров запуска. Поэтому используйте ".." для dotnet run обычного Properties/launchSettings.json или My Project/launchSettings.json файла. Visual Studio разрешает то же значение родительскому каталогу проекта.

Windows Forms и WPF приложения не добавляют другой dotnet run тип профиля. Project Используйте профиль с общими параметрами, такими как commandLineArgs иenvironmentVariables. В Visual Studio эти типы проектов настольных компьютеров также могут использовать применимые свойства отладчика, например nativeDebugging для смешанной управляемой и собственной отладки или jsWebView2Debugging для WebView2. Свойства браузера и URL-адреса влияют только при их использовании поставщиком запуска или приложением.

Другие типы проектов и Visual Studio рабочие нагрузки могут устанавливать поставщики запуска, которые добавляют типы профилей или интерпретируют дополнительные свойства. Эти расширения не поддерживаются dotnet run: интерфейс командной строки пропускает неподдерживаемые типы профилей во время выбора по умолчанию и сообщает об ошибке при явном выборе.

Поддерживаемые параметры отладчика Visual Studio и пользовательский интерфейс project см. в разделе Project параметры конфигурации отладки .NET C#.

Arguments

<applicationArguments>

Аргументы, передаваемые в запущенное приложение.

Все аргументы, которые не распознаются приложением dotnet run . Чтобы разделить аргументы dotnet run из аргументов для приложения, используйте -- этот параметр.

Переадресация аргументов в приложение

dotnet run перенаправит любой маркер, который он не распознает приложению. Пересылаемые маркеры сохраняют исходный порядок, но dotnet run сначала удаляют параметры, которые он понимает. Если распознанный параметр отображается между нераспознанным именем параметра и его значением, удаление распознаваемого параметра может изменить значение оставшихся маркеров.

Например, следующая команда пересекает распознанный параметр --project между маркерами, которые приложение должно получать:

dotnet run --app-flag --app-name --project ConsoleApp.csproj A.txt

После dotnet run использования --project ConsoleApp.csprojприложение получает --app-flag --app-name A.txt. Затем приложение обрабатывается A.txt как значение --app-name, которое не соответствует исходной командной строке.

Чтобы избежать этой неоднозначности, поместите аргументы приложения после литерала --:

dotnet run --project ConsoleApp.csproj -- --app-flag --app-name A.txt

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

Note

Такое же поведение применяется к dotnet build и к dotnet test в Microsoft. Режим Testing.Platform (MTP), который перенаправит нераспознанные маркеры в MSBuild или в тестовое приложение соответственно. Дополнительные сведения см. в dotnet testстатье "Переадресация аргументов в тестовое приложение".

Параметры

  • --

    Отделяет аргументы, предназначенные для dotnet run, от аргументов для выполняемого приложения. Все аргументы после разделителя передаются выполняемому приложению.

  • -a|--arch <ARCHITECTURE>

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

  • --artifacts-path <ARTIFACTS_DIR>

    Все выходные файлы сборки из выполняемой команды будут отправляться в вложенные папки в соответствии с указанным путем, разделенным проектом. Дополнительные сведения см. в макете выходных данных артефактов. Этот параметр и указанное значение должны быть явно каскадными в любой dotnet команде, которая зависит от выходных данных другой dotnet команды, например при использовании dotnet build --no-restore и dotnet publish --no-build. Доступно с .NET 8 SDK.

  • -c|--configuration <CONFIGURATION>

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

  • --disable-build-servers

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

  • -e|--environment <KEY=VALUE>

    Задает указанную переменную среды в процессе, которая будет выполняться командой. Указанная переменная среды не применяется к dotnet run процессу.

    Переменные среды, передаваемые через этот параметр, имеют приоритет над переменными среды окружающей среды, директивами System.CommandLine env и environmentVariables выбранным профилем запуска. Дополнительную информацию см. в разделе Переменные среды.

    (Этот параметр был добавлен в пакет SDK .NET 9.0.200.)

  • -f|--framework <FRAMEWORK>

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

  • --file <FILE_PATH>

    Путь к выполняемом приложению на основе файлов. Если путь не указан, текущий каталог используется для поиска и запуска файла. Дополнительные сведения о приложениях на основе файлов см. в разделе "Создание файловых приложений C#".

    В Unix выполните приложения на основе файлов непосредственно с помощью имени файла, добавив директиву shebang (#!) и установив разрешение на выполнение. Дополнительные сведения см. в разделе поддержки Unix Shebang (#!).

    Представлено в пакете SDK .NET 10.0.100.

  • --force

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

  • --interactive

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

  • -lp|--launch-profile <NAME>

    Имя профиля запуска, используемого при запуске приложения. Дополнительные сведения см. в разделе "Профили запуска".

  • --no-build

    Не выполняет сборку проекта перед запуском. Он также неявно задает флаг --no-restore.

  • --no-cache

    Пропустите актуальные проверки и всегда создайте программу перед запуском.

  • --no-dependencies

    При восстановлении проекта с перекрестными ссылками между проектами восстанавливает только корневой проект, но не ссылки.

  • --no-launch-profile

    Не пытается использовать файл launchSettings.json для настройки приложения.

  • --no-restore

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

  • --no-self-contained

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

  • --os <OS>

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

  • --project <PATH>

    Задает путь к запускаемому файлу проекта (имя папки или полный путь). Если значение не задано, по умолчанию используется текущий каталог.

    Сокращение -p для --project устарело начиная с пакета SDK .NET 6. В течение ограниченного времени -p можно по-прежнему использовать для --project предупреждения об отказе. Если аргумент, указанный для параметра, не содержит =, команда принимает -p в качестве короткой формы для --project. В противном случае команда предполагает, что -p является короткой формой для --property. Это гибкое использование -p для --project будет прекращено в .NET 7.

  • --property:<NAME>=<VALUE>

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

    --property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2>
    --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
    

    Короткая форма -p может использоваться для --property. Если аргумент, указанный для параметра, содержит =, -p принимается как короткая формат для --property. В противном случае команда предполагает, что -p является короткой формой для --project.

    Чтобы передать --property в приложение вместо того, чтобы задать свойство MSBuild, укажите параметр после разделителя синтаксиса --, например:

    dotnet run -- --property name=value
    
  • -r|--runtime <RUNTIME_IDENTIFIER>

    Задает целевую среду выполнения для восстановления пакетов. Список идентификаторов сред выполнения (RID) см. в каталоге RID.

  • --sc|--self-contained

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

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

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

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

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

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

  • -v|--verbosity <LEVEL>

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

  • -?|-h|--help

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

Переменные среды

Следующие источники применяют переменные среды к запущенным приложениям:

  1. Переменные среды окружающей среды из операционной системы при выполнении команды.
  2. Директивы System.CommandLine env , например [env:key=value]. Они применяются ко всему dotnet run процессу, а не только к проекту, который выполняется dotnet run.
  3. Значения, созданные из выбранного профиля запуска. dotnet runнаборы и DOTNET_LAUNCH_PROFILEapplicationUrl в наборах профилей ProjectASPNETCORE_URLS.
  4. environmentVariables из выбранного профиля запуска, если таковой есть. Они применяются к проекту, который выполняется dotnet run.
  5. -e|--environment значения параметра CLI (добавлено в пакет SDK .NET версии 9.0.200). Они применяются к проекту, который выполняется dotnet run.

Среда создается в том же порядке, что и этот список, поэтому -e|--environment параметр имеет самый высокий приоритет.

Примеры

  • Выполнение проекта в текущем каталоге:

    dotnet run
    
  • Запустите указанное приложение на основе файлов в текущем каталоге:

    dotnet run --file ConsoleApp.cs
    

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

  • Выполнение указанного проекта:

    dotnet run --project ./projects/proj1/proj1.csproj
    
  • Выполните проект в текущем каталоге, указав конфигурацию выпуска.

    dotnet run --property:Configuration=Release
    
  • Выполнение проекта в текущем каталоге (аргумент --help в этом примере передается приложению, так как используется пустой параметр --):

    dotnet run --configuration Release -- --help
    
  • Восстановление зависимостей и средств для проекта в текущем каталоге с выводом минимального объема выходных данных и последующим запуском проекта.

    dotnet run --verbosity m
    
  • Запустите проект в текущем каталоге с помощью указанной платформы и передайте аргументы в приложение:

    dotnet run -f net6.0 -- arg1 arg2
    

    В следующем примере три аргумента передаются приложению. Один аргумент передается с помощью, -а два аргумента передаются после --:

    dotnet run -f net6.0 -arg1 -- arg2 arg3