Как запустить консольное приложение net core

Обновлено: 07.07.2024

В программе по умолчанию в статическом методе CreateHostBuilder как раз создается и настраивается IHostBuilder. Непосредственно создание IHostBuilder производится с помощью метода Host.CreateDefaultBuilder(args) .

Данный метод выполняет ряд задач.

Устанавливает корневой каталог (для этого используется свойство Directory.GetCurrentDirectory). Корневой каталог представляет папку, где будет производиться поиск различного содержимого, например, представлений.

Устанавливает конфигурацию хоста. Для этого загружаются переменные среды с префиксом "DOTNET_" и аргументы командной строки

Устанавливает конфигурацию приложения. Для этого загружается содержимое из файлов appsettings.json и appsettings..json, а также переменные среды и аргументы командной строки. Если приложение в статусе разработки, то также используются данные Secret Manager (менеджера секретов), который позволяет сохранить конфиденциальные данные, используемые при разработке.

Добавляет провайдеры логирования

Если проект в статусе разработки, то также обеспечивает валидацию сервисов

Далее вызывается метод ConfigureWebHostDefaults() . Этот метод призван выполнять конфигурацию параметров хоста, а именно:

Загружает конфигурацию из переменных среды с префиксом "ASPNETCORE_"

Запускает и настраивает веб-сервер Kestrel, в рамках которого будет разворачиваться приложение

Добавляет компонент Host Filtering , который позволяет настраивать адреса для веб-сервера Kestrel

Если переменная окружения ASPNETCORE_FORWARDEDHEADERS_ENABLED равна true , добавляет компонент Forwarded Headers, который позволяет считывать из запроса заголовки "X-Forwarded-"

Если для работы приложения требуется IIS, то данный метод также обеспечивает интеграцию с IIS

Метод ConfigureWebHostDefaults() в качестве параметра принимает делегат Action<IWebHostBuilder& . А помощью последовательного вызова цепочки методов у объекта IWebHostBuilder производится инициализация веб-сервера для развертывания веб-приложения. В частности, в данном случае у IWebHostBuilder вызывается метод UseStartup() :

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

В методе Main вызывается метод у созданного объекта IHostBuilder вызывается метод Build() , который собственно создает хост - объект IHost , в рамках которого развертывается веб-приложение. А затем для непосредственного запуска у IHost вызывается метод Run :

Предварительные требования

Создание приложения

Запустите Visual Studio 2022.

На начальной странице выберите Создать проект.

Кнопка &quot;Создать проект&quot;, выбранная на начальной странице Visual Studio

Окно &quot;Создание проекта&quot; с выбранными фильтрами

Окно настройки нового проекта с полями имени проекта, расположения и имени решения

Шаблон создает простое приложение, которое отображает Hello World в окне консоли. Код находится в файле Program.cs или Program.vb:

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

Код определяет класс Program с одним методом Main , который принимает массив String в качестве аргумента. Main — точка входа в приложение. Это метод, который автоматически вызывается средой выполнения при запуске приложения. Все аргументы, предоставленные в командной строке при запуске приложения, доступны через массив args.

Запуск приложения

Нажмите клавиши CTRL + F5 , чтобы запустить программу без отладки.

Откроется окно консоли с текстом "Hello World!" на экране.

Окно консоли с приложением Hello World и надписью &quot;Чтобы продолжить, нажмите любую клавишу&quot;

Для закрытия консольного окна нажмите любую клавишу.

Улучшение приложения

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

В Program.cs или Program.vb замените содержимое метода Main (строка, вызывающая Console.WriteLine ) следующим кодом:

Этот код отображает запрос в окне консоли и ожидает, чтобы пользователь ввел строку текста и нажал клавишу ВВОД . Приложение сохраняет полученную строку в переменной с именем name . Оно также получает значение свойства DateTime.Now, которое содержит текущее локальное время, и присваивает его переменной с именем currentDate . Затем оно отображает эти значения в окне консоли. Наконец, приложение выводит запрос в окне консоли и вызывает метод Console.ReadKey(Boolean) для ожидания ввода данных пользователем.

Знак доллара ( $ ) перед строкой позволяет вставить такие выражения, как имена переменных, в фигурные скобки в строке. Значение выражения вставляется в строку вместо выражения. Такой синтаксис называется интерполированными строками.

Нажмите клавиши CTRL + F5 , чтобы запустить программу без отладки.

В ответ на приглашение в командной строке введите имя и нажмите клавишу ВВОД .

Окно консоли с измененными выходными данными программы

Для закрытия консольного окна нажмите любую клавишу.

Дополнительные ресурсы

Следующие шаги

Предварительные требования

Создание приложения

Запустите Visual Studio 2019.

На начальной странице выберите Создать проект.

Кнопка &quot;Создать проект&quot;, выбранная на начальной странице Visual Studio

Окно &quot;Создание проекта&quot; с выбранными фильтрами

Окно настройки нового проекта с полями имени проекта, расположения и имени решения

Диалоговое окно &quot;Дополнительные сведения&quot;

Код шаблона определяет класс Program с одним методом Main , который принимает в качестве аргумента массив String.

Main — точка входа в приложение. Это метод, который автоматически вызывается средой выполнения при запуске приложения. Все аргументы, предоставленные в командной строке при запуске приложения, доступны через массив args.

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

Запуск приложения

Нажмите клавиши CTRL + F5 , чтобы запустить программу без отладки.

Откроется окно консоли с текстом "Hello World!" на экране.

Окно консоли с приложением Hello World и надписью &quot;Чтобы продолжить, нажмите любую клавишу&quot;

Для закрытия консольного окна нажмите любую клавишу.

Улучшение приложения

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

В Program.cs или Program.vb замените содержимое метода Main (строка, вызывающая Console.WriteLine ) следующим кодом:

Этот код отображает запрос в окне консоли и ожидает, чтобы пользователь ввел строку текста и нажал клавишу ВВОД . Приложение сохраняет полученную строку в переменной с именем name . Оно также получает значение свойства DateTime.Now, которое содержит текущее локальное время, и присваивает его переменной с именем currentDate . Затем оно отображает эти значения в окне консоли. Наконец, приложение выводит запрос в окне консоли и вызывает метод Console.ReadKey(Boolean) для ожидания ввода данных пользователем.

Знак доллара ( $ ) перед строкой позволяет вставить такие выражения, как имена переменных, в фигурные скобки в строке. Значение выражения вставляется в строку вместо выражения. Такой синтаксис называется интерполированными строками.

Нажмите клавиши CTRL + F5 , чтобы запустить программу без отладки.

В ответ на приглашение в командной строке введите имя и нажмите клавишу ВВОД .

Окно консоли с измененными выходными данными программы

Для закрытия консольного окна нажмите любую клавишу.

Дополнительные ресурсы

Следующие шаги

Если это приложение, зависящее от фреймворка (по умолчанию), вы запускаете его dotnet yourapp.dll .

Если это автономное приложение, вы запускаете его yourapp.exe в Windows и ./yourapp Unix.

@GlenThomas Если вы хотите запустить разрабатываемое приложение, вы используете dotnet run . Кроме того, где вы смотрели? Где вы ожидаете эту информацию? @GlenThomas Это не так, dotnet run работает для новых проектов csproj так же, как и для project.json. @GlenThomas, не уверен, что это ваша проблема, но когда вы пытаетесь ее использовать dotnet run , убедитесь, что вы находитесь в каталоге проекта, а не в каталоге решения.

Вы можете очень легко создать EXE (для Windows) без использования каких-либо загадочных команд сборки. Вы можете сделать это прямо в Visual Studio.

Консольное приложение Публикация

Ага. Там есть EXE - вместе с 217 другими файлами (api-ms-win-core-namedpipe-l1-1-0.dll и т. Д.). Есть ли способ связать это в один EXE-файл? Хороший вопрос @ Элтон. Я не знаю. AFAIK вы должны развернуть все библиотеки. Я думаю, что тот факт, что он настроен как автономный, потребует наличия всех этих библиотек DLL. Если они вам не нужны, режим развертывания, вероятно, должен быть зависимым от

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

Предположим, у вас есть простое консольное приложение с именем MyTestConsoleApp. Откройте консоль диспетчера пакетов и выполните следующую команду:

-c флаг означает, что вы хотите использовать конфигурацию отладки (в другом случае вы должны использовать значение Release) - r флаг означает, что ваше приложение будет работать на платформе Windows с архитектурой x64.

Когда процедура публикации будет завершена, вы увидите файл * .exe, расположенный в каталоге bin / Debug / publish.

Теперь вы можете вызвать его с помощью инструментов командной строки. Поэтому откройте окно CMD (или терминал), перейдите в каталог, где находится ваш файл * .exe, и напишите следующую команду:

С помощью dotnetcore3.0 вы можете упаковать все решение в один исполняемый файл, используя PublishSingleFile свойство

Пример Self Contained , Release OSX исполняемого файла:

Пример Self Contained , Debug Linux 64bit исполняемым:

Сборка Linux не зависит от дистрибутива, и я обнаружил, что они работают на Ubuntu 18.10, CentOS 7.7 и Amazon Linux 2.

Автономный исполняемый файл включает Dotnet Runtime, и Runtime не требует установки на целевой машине. Опубликованные исполняемые файлы сохраняются в:

<ProjectDir>/bin/<Release or Debug>/netcoreapp3.0/<target-os>/publish/ в Linux, OSX и

<ProjectDir>\bin\<Release or Debug>\netcoreapp3.0\<target-os>\publish\ на винде.

Вы также можете добавить конфигурацию в файл csproj: <PublishSingleFile>true</PublishSingleFile>

Чтобы запустить консольный проект с помощью командной строки Windows, выберите конкретный путь из своего каталога и введите следующую команду

Как настроить такую публикацию на примере консольного приложения?

На самом деле процесс настройки такой публикации ничем не отличается от того, что мы привыкли видеть в соответствующем мастере Visual Studio проходя все его окна. Отличие появляется только в самом конце настройки, так как для публикации в режиме «автономного исполняемого файла» требуется изменить значения от одного до трёх параметров (в зависимости от того, что вы хотите получить в итоге) заданные по умолчанию.

В случае необходимости эти параметры можно изменить в уже готовом профиле публикации. В частности, при публикации в папку изменить данные параметры в мастере на этапе его первоначальной настройки невозможно.

Для этого выберите профиль и нажмите ссылку «Показать все параметры».

Профиль публикации

В появившемся окне установите для параметра «Режим развёртывания» значение «Автономное».

Параметры публикации

По умолчанию параметр «Целевая среда выполнения» имеет значение «win-x86». Если вы планируете публиковать приложение для другой платформы вам нужно указать соответствующую платформу, как показано на скриншоте ниже.

Выбор среды исполнения

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

Для того чтобы сохранить внесённые изменения нажмите кнопку «Сохранить».

После публикации приложения мы увидим в соответствующей папке все необходимые файлы.

Выходные файлы

Для простейшего консольного приложения (стандартный шаблон Visual Studio с «Hello, world!» получилось в общей сложности 225 файлов с общим размером порядка 58 МБ.

Исходный размер выходных файлов

Многовато для «Hello, world!», но такова плата за автономность.

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

Параметры публикации отдельный файл

В этом случае создаётся всего 6 файлов с общим размером чуть больше 52 МБ.

азмер основного исполняемого файла

При этом основная часть приходится на исполняемый файл приложения (в нашем примере это ConsoleApp1.exe)

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

Если вы используете для публикации приложений ClickOnce, то настройка несколько упрощается так как в этом случае мастер позволяет задать нужные настройки ещё на этапе создания профиля публикации.

Настройка при создании профиля ClickOnce

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

Читайте также: