【发布时间】:2021-06-25 16:32:02
【问题描述】:
我有 .net core 3.1 控制台应用程序,我想将它作为 Windows 服务运行,我的 program.cs 看起来像
public class Program
{
public static async Task Main(string[] args)
{
var isService = !(Debugger.IsAttached || args.Contains("--console"));
var builder = CreateHostBuilder(args);
if (isService)
{
await builder.RunAsServiceAsync();
}
else
{
await builder.RunConsoleAsync();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker1>();
services.AddHostedService<Worker2>();
});
}
.csproj 是
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>dotnet-MyWorkerService-16487890-DF99-45C2-8DC4-5475A21D6B75</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.16" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.16" />
</ItemGroup>
</Project>
但是对于 RunAsServiceAsync() 错误就像“IHostBuilder 不包含 RunAsServiceAsync 的定义”一样
谁能指出我在哪里/我错过了什么?
【问题讨论】:
-
您是否在使用某些将
RunAsServiceAsync作为IHostBuilder扩展的第三部分库?这是我认为唯一可能的,因为该功能不是 .net 核心的原生功能 -
在他们的一个例子中发现了这一点。可以自己实现它github.com/aspnet/Hosting/blob/…
-
@Nkosi 我在网上看到了许多具有 RunAsServiceAsync 的 .net 核心 Windows 服务示例,因此认为它是 .net 核心的原生服务,感谢您指出这一点
标签: .net-core windows-services ihostedservice