如何实现独立于应用程序的 Kestrel Windows 服务?

问题描述

如何创建独立于应用程序的 Kestrel Windows 服务?我创建了一个通用的 dot.net 5.0 工作服务项目,其中有一个专用文件夹用于已发布的 asp.net 核心应用程序(在本例中为 Blazor 服务器端)。 Blazor 应用程序是一个单独的项目,不属于 Kestrel 服务项目。目标是拥有一个通用的 Windows 服务,该服务将选择位于专用子文件夹中的任何 Asp.Net Core 应用程序。后来我可以将此服务与任何 AspNetCore 应用一起使用。

Worker Service Program.cs 文件

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Hosting;

namespace KestrelService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            //.ConfigureAppConfiguration((hostingContext,config) =>
            //{
            //    config.SetBasePath(Directory.GetCurrentDirectory());
            //    config.AddJsonFile("appsettings.json");
            //})
            .ConfigureServices((hostContext,services) =>
            {
                services.AddHostedService<Worker>();
            })
            .ConfigureWebHost(config =>
                {
                    config.UseUrls("https://*:5001");
                })
            ;
    }
}

已发布的 Kestrel 服务文件夹如下所示:

AspNetCoreWebApp 文件夹用于托管实际的 Web 应用程序

enter image description here

接下来我有两个问题:

  1. 我应该如何在 Kestrel 服务项目中构建我的 Program.cs 以便能够在子文件夹中托管任何 AspNetCore 应用程序?因此,Kestrel 服务将成为所提供网络应用的入口点。
  2. 如果我的 Kestrel 服务是独立的,我是否也应该将我的 Blazor 应用发布为独立的? - 考虑在目标机器上根本没有安装框架的场景。我想避免框架的过度重复发布。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)