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

标签 .net-core

上下文是 .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/

相关文章:

docker - 无法从本地主机访问 docker 容器内的 Web API

apache - 如何在 Apache 网站内托管 ASP.NET Core Web 应用程序?

c# - 如何在.NET Core中的Web API中获取授权用户?

.net-core - Ubuntu 16.04 中 WebApplication(XXX) 文件夹不包含要恢复的项目

c# - 用于数组和集合的自定义 Newtonsoft JsonConverter 以进行进一步操作

c# - EF Core : Getting table with Include, 但 Include 不应获得一列

c# - EF 核心实体数据访问中的强制转换无效

rabbitmq - Masstransit 无法从 docker 容器访问主机 RabbitMQ

c# - 从 .NET 5 应用程序中的应用程序运行时目录加载 native 库

.Net Core 和 NuGet