Комментарии 7
Интересно, но перевод хромает. Мне кажется не хватает плашки как на MSDN: «Эта статья переведена с помощью средств машинного перевода.».
А зачем шаблон? По сути там 20 строк кода и обыкновенное консольное приложение.
Да и сервисы очень не часто нужны. В моей практике мы создавали только 1 раз.
НЛО прилетело и опубликовало эту надпись здесь
Почему не планировщик windows и консольная утилита? Просто интересно.
Отлаживаться проще, да и возможные утечки памяти не беспокоят по определению.
НЛО прилетело и опубликовало эту надпись здесь
UseServiceBaseLifetime() был переименован в UseWindowsService() в релизной версии .NET Core 3.0

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureServices(services =>
            {
                services.AddHostedService<Worker>();
            });
}
Ещё нужно поставить правильный RuntimeIdentifier в проекте, например win7-x64. Иначе предполагается, что код должен запускаться на любой платформе (включая Mac и Linux), тогда выбирается версия System.ServiceProcess.ServiceController.dll в которой ServiceBase на всё бросает PlatformNotSupportedException.

<Project Sdk="Microsoft.NET.Sdk.Worker">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
    <OutputType>Exe</OutputType>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.9" />
  </ItemGroup>
</Project>
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.