.NET Core 3.0 рдореЗрдВ рд╣рдо рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЗрд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡рд░реНрдХрд░ рд╕рд░реНрд╡рд┐рд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдкрдХреЛ .NET рдХреЛрд░ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдПрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рджреЗрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред рдЗрд╕ рд╡реЙрдХрдереНрд░реВ рдореЗрдВ рд╣рдо рдПрдХ рд╡рд░реНрдХрд░ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд┐рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдВрдЧреЗред

рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ
рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдиреЛрдЯ: рд╣рдорд╛рд░реЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡реЗрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рдорд╛рди рдореЗрдиреВ рдореЗрдВ рд╣реИред рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рд╡рд░реНрдХрд░ рд╕рд░реНрд╡рд┐рд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╕реАрдзреЗ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рдЕрдВрджрд░ рд░рдЦрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВред
Visual Studio рдореЗрдВ рдПрдХ рд╡рд░реНрдХрд░ рдмрдирд╛рдПрдБ



рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдПрдХ рд╡рд░реНрдХрд░ рдмрдирд╛рдПрдБ
dotnet new worker
рдЪрд▓рд╛рдПрдБ

Windows рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдБ
Windows рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ ServiceBase
.NET рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╢реБрд░реВ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
Microsoft.Extensions.Hosting.WindowsServices
NuGet рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝реЗрдВ

рд╣рдорд╛рд░реЗ Program.cs рдореЗрдВ HostBuilder
рд▓рд┐рдП UseServiceBaseLifetime
рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceBaseLifetime() .ConfigureServices(services => { services.AddHostedService<Worker>(); }); }
рдпрд╣ рддрд░реАрдХрд╛ рдПрдХ рджреЛ рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЕрдЧрд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдХреЛрдИ рдРрд╕рд╛ рдПрдк рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рдиреЗ рдкрд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧрд╛рд░реНрдб рдХреНрд▓реЙрдЬ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд┐рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдРрдк рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рджреВрд╕рд░реЗ, рдпрд╣ рдЖрдкрдХреЗ рд╣реЛрд╕реНрдЯ рдХреЛ ServiceBaseLifetime
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред Windows рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдкрд░ рдЕрдкрдиреЗ рдРрдк рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ServiceBase
рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ ConsoleLifetime
рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ CTL + C рдЬреИрд╕реЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
рд╡рд░реНрдХрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ ServiceBaseLifetime
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдЗрди-рдкреНрд▓реЗрд╕ рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рднреА рд╕рд░реНрд╡рд┐рд╕ рдЪрд▓ рд░рд╣реА рд╣реЛрдЧреА, рддрдм рдПрдХреНрд╕рдИ рд▓реЙрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрджрдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕реЗрд╡рд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
dotnet publish -oc:\code\workerpub
рдлрд┐рд░ рд╣рдо рдПрдбрдорд┐рди рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдореЗрдВ sc рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
sc create workertest binPath=c:\code\workerpub\WorkerTest.exe
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рд╕реБрд░рдХреНрд╖рд╛ рдиреЛрдЯ: рдЗрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рдЪрд▓рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдРрд╕реА рдХреЛрдИ рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЖрдо рддреМрд░ рдкрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕ рдЦрд╛рддреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕реЗрд╡рд╛ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдпрд╣рд╛рдВ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди ASP.NET рдбреЙрдХреНрд╕ рдкрд░ рдХреБрдЫ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows- рд╕реЗрд╡рд╛? рджреГрд╢реНрдп = Aspnetcore-2.2
рд▓реЙрдЧрд┐рдВрдЧ
рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдИрд╡реЗрдВрдЯ рд▓реЙрдЧ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд▓реЙрдЧ рд╕рдВрджреЗрд╢ рдХреЛ рд╕реАрдзреЗ рд╡рд┐рдВрдбреЛрдЬ рдИрд╡реЗрдВрдЯ рд▓реЙрдЧ рдореЗрдВ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдИрд╡реЗрдВрдЯ рд▓реЙрдЧ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк Microsoft.Extensions.Logging.EventLog
рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ Program.cs
рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()) .ConfigureServices(services => { services.AddHostedService<Worker>(); });
рднрд╡рд┐рд╖реНрдп рдХрд╛ рдХрд╛рдо
рдЖрдЧрд╛рдореА рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рд╣рдо Windows рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ:
- UseWindowsServiceBaseLifetime рдХреЛ UseWindowsService рдХрд╛ рдирд╛рдо рджреЗрдВ
- Windows рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рдиреЗ рдкрд░ рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдФрд░ рдмреЗрд╣рддрд░ рдПрдХреАрдХрд░рдг рдЬреЛрдбрд╝реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕ рдирдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдБрдЧреЗ рдФрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдХрд┐рд╕реА рднреА рдмрдЧ рдпрд╛ рд╕реБрдЭрд╛рд╡ рдХреЛ рдпрд╣рд╛рдБ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/aspnet/AspNetCore/issues/new/choose
