上下文是 .Net Core Worker Service。我想在部署在 Windows 操作系统上时将它作为 Windows 服务运行,在部署在 Linux 操作系统上时作为守护程序运行。但我只想保留一个二进制文件用于在 Windows 和 Linux 上进行部署。
此 article (和许多其他)管道 UseWindowsService 或 UseSystemd,这意味着为了让这个工作服务在 Winodws 和 Linux 上运行,必须有两个不同的二进制文件。
由于我是 DotNet Core 的新手,我想了解/知道它是否可以根据操作系统有条件地管道 UseWindowsService/UseSystemd - 只保留一个二进制文件。
最佳答案
正如@Lex Li 所评论的,.Net Core
不支持跨平台的单个二进制文件| ,实际上我从未遇到过任何能够做到这一点的本地二进制文件(因此 HTML、JS、JAVA“.jar、.ear、.war”不算在内)
下面的代码片段是创建守护进程和 Windows 服务的最少代码:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
})
.UseWindowsService()
.UseSystemd();
UseSystemd
方法将 noop
当不作为守护进程运行时,您仍然可以正常运行和调试您的应用程序,或者在有和没有 systemd 的情况下在生产中使用它。.UseWindowsService()
和 .UseSystemd()
是 NOOP
所以他们只能在各自的环境中工作,所以在 Windows 上 .UseSystemd()
是无操作(只是什么都不做)和在 Linux .UseWindowsService()
是无操作(什么都不做)。备注:
Build automation是流行软件用来构建跨平台二进制文件的常用方法。
关于.net-core - Windows 和 Linux 上的 Net Core Worker 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62861891/