.net core Windows和Linux上的Net Core Worker服务

.net core Windows和Linux上的Net Core Worker服务,.net-core,.net Core,上下文是.Net核心工作者服务。我希望在Windows操作系统上部署时将其作为Windows服务运行,在Linux操作系统上部署时作为守护进程运行。但我只想保留一个二进制文件,以便在Windows和Linux上部署 这个(以及许多其他)管道要么使用WindowsService,要么使用Systemd,这意味着为了让这个辅助服务在Winodws和Linux上运行,必须有两个不同的二进制文件 由于我是DotNet Core的新手,我想了解/知道它是否可以基于操作系统有条件地使用UseWindowsS

上下文是.Net核心工作者服务。我希望在Windows操作系统上部署时将其作为Windows服务运行,在Linux操作系统上部署时作为守护进程运行。但我只想保留一个二进制文件,以便在Windows和Linux上部署

这个(以及许多其他)管道要么使用WindowsService,要么使用Systemd,这意味着为了让这个辅助服务在Winodws和Linux上运行,必须有两个不同的二进制文件


由于我是DotNet Core的新手,我想了解/知道它是否可以基于操作系统有条件地使用UseWindowsService/UseSystemd,只保留一个二进制。

正如@Lex Li评论的那样,
中不支持跨平台的单二进制。
,实际上我从未遇到过任何本机二进制(因此HTML、JS、JAVA)“.jar、.ear、.war”不算数)能做到这一点

下面的代码段是创建守护程序和windows服务的最低代码:

公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureServices((主机上下文,服务)=>
{
services.AddHostedService();
})
.UseWindowsService()
.UseSystemd();
当不作为守护进程运行时,
UseSystemd
方法将
noop
,因此您仍然可以正常运行和调试您的应用程序,或者在有或没有systemd的情况下在生产中使用它

.UseWindowsService()
.UseSystemd()
NOOP
,因此它们只能在各自的环境中工作,因此在Windows
上.UseSystemd()
是不可操作的(什么也不做),而在Linux
中.UseWindowsService()
是不可操作的(什么也不做)

备注: 是流行软件用于构建跨平台二进制文件的常用方法。

。NET Core不提倡“一个二进制文件”(有关详细信息,请学习自包含部署),因此,如果您不尽早习惯这一点,您将自寻烦恼。依赖于框架的部署可能允许您使用相同的二进制文件,但在不同的操作系统上安装不同的框架版本需要更多的工作。