Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
ASP.NET Core можно развертывать в виде обычной службы Windows без каких-либо веб-серверов, в частности, IIS.
Создадим новый проект ASP.NET Core 2.1 любого типа. Прежде всего, нам надо добавить в проект через Nuget пакет Microsoft.AspNetCore.Hosting.WindowsServices.
После создания проекта обратимся к файлу Program.cs, который во всех проектах выглядит идентично:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace ServiceHostingApp { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); } }
Изменим его следующим образом:
using System.Diagnostics; using System.IO; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.WindowsServices; namespace ServiceHostingApp { public class Program { public static void Main(string[] args) { // получаем путь к файлу var pathToExe = Process.GetCurrentProcess().MainModule.FileName; // путь к каталогу проекта var pathToContentRoot = Path.GetDirectoryName(pathToExe); // создаем хост var host = WebHost.CreateDefaultBuilder(args) .UseContentRoot(pathToContentRoot) .UseStartup<Startup>() .Build(); // запускаем в виде службы host.RunAsService(); } } }
Чтобы запустить приложение в виде службы у объекта IWebHost вызывается метод RunAsService().
Теперь нам надо опубликовать приложение в файловой системе. Мы можем это сделать через консоль с помощью команды dotnet publish
.
Для этого вначале в командной строке/терминале надо перейти к папке проекта и из нее запустить команду:
dotnet publish --configuration Release --runtime win10-x64 --output c:\myapp
Поскольку приложение будет устанавливаться в виде службы Windows и должно иметь исполняемый файл, то указывается
параметр --runtime
. В данном случае служба будет устанавливаться на Windows 10 с 64-битной архитектурой. Поэтому
для этого параметра указано значение win10-x64
.
Параметр --output
указывает, где будет опубликовано приложение - то есть в данном случае в папке c:\myapp.
Также можно поизвести публикацию с помощью графических средств в Visual Studio.
После публикации с помощью консольной утилиты sc.exe создадим службу:
sc create НАЗВАНИЕ_СЛУЖБЫ binPath= "ПУТЬ К ИСПОЛНЯЕМОМУ ФАЙЛУ EXE"
После команды create
указывается имя службы. Службу можно назвать как угодно.
Параметр binPath
указывает на путь к исполняемому файлу (в том числе имя самого файла).
Причем между знаком равно и путем к файлу в кавычках должен идти пробел.
Например, ранее приложение было опубликовано в папке c:\myapp. Как правило, название исполняемого файла соответствует названию проекта, то есть в моем случае
в папке c:\myapp после публикации находится исполняемый файл ServiceHostingApp.exe
. И, допустим, служба буде называться
MyAspService. В этом случае команда на создание службы будет выглядеть следующим образом:
sc create MyAspService binPath= "c:\myapp\servicehostingapp.exe"
После установки службы запустим ее с помощью команды:
sc start MyAspService
Команде start
передается имя ранее установленной службы - в моем случае это MyAspService.
После установки мы можем обратиться обратиться к нашему веб-приложению из браузера по адресу http://localhost:5000: