zoukankan      html  css  js  c++  java
  • 使用Topshelf部署.net core windows服务 Demo

    使用Topshelf部署.net core windows服务 Demo

    引用相关 包

    	<ItemGroup>
    		<PackageReference Include="Topshelf" Version="4.2.1" />
    	</ItemGroup>
    
    

    设置项目类型

    <Project Sdk="Microsoft.NET.Sdk.Worker">
    

    修改 Program.cs

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .ConfigureServices(services =>
                {
                    services.AddHostedService<VideosWatcher>();
                });
    }
    

    修改后

        public class Program
        {
            public static void Main(string[] args)
            {
                HostFactory.Run(x =>
                {
                    x.SetServiceName("TopshelfDemo.ServiceName");
                    x.SetDisplayName("TopshelfDemo.DisplayName");
                    x.SetDescription("TopshelfDemo.Description");
    
                    x.Service<IHost>(s =>
                    {
                        s.ConstructUsing(() => CreateHostBuilder(args).Build());
                        s.WhenStarted(service =>
                        {
                            service.Start();
                        });
                        s.WhenStopped(async service =>
                        {
                            await service.StopAsync();
                        });
                    });
                    x.StartAutomatically();
                });
            }
    
            const string OutputInfoTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}{NewLine}";
            const string OutputPropTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Properties:l}{NewLine}{Exception}{NewLine}";
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args)
    #if DEBUG
                    .UseEnvironment(Environments.Development)
    #else
                    .UseEnvironment(Environments.Staging)
                    //.UseEnvironment(Environments.Production)
    #endif
                    .UseContentRoot(AppContext.BaseDirectory)
                    .UseSerilog((hostingContext, loggerConfiguration) =>
                    {
                        loggerConfiguration
                            .ReadFrom.Configuration(hostingContext.Configuration)
                            .Enrich.WithExceptionDetails()
                            .Enrich.FromLogContext()
                            .WriteTo.Debug()
                            .WriteTo.Console(theme: SystemConsoleTheme.Colored)
                            .WriteTo.File(AppContext.BaseDirectory + "log/log.txt",
                                outputTemplate: OutputInfoTemplate, rollingInterval: RollingInterval.Day)
                            .WriteTo.File(AppContext.BaseDirectory + "log/error.txt", LogEventLevel.Warning,
                                outputTemplate: OutputPropTemplate, rollingInterval: RollingInterval.Day);
                    })
                    .ConfigureServices((hostContext, services) =>
                    {
                        services.AddHostedService<Worker>();
                    });
        }
    

    这里我使用 Serilog 作为日志系统
    通过修改 outputTemplate 来输出想要 log 文件
    效果如下

    
    2020-11-04 17:13:05.873 +08:00 [INF] Worker.SaveMessage 已保存11条数据
    
    2020-11-04 17:13:06.891 +08:00 [INF] Save Message Worker running at: 2020/11/4 17:13:06
    
    2020-11-04 17:13:06.893 +08:00 [INF] Worker.SaveMessage 已保存12条数据
    
    2020-11-04 17:13:07.908 +08:00 [INF] Save Message Worker running at: 2020/11/4 17:13:07
    
    2020-11-04 17:13:07.910 +08:00 [INF] Worker.SaveMessage 已保存13条数据
    
    2020-11-04 17:13:08.928 +08:00 [INF] Save Message Worker running at: 2020/11/4 17:13:08
    
    2020-11-04 17:13:08.929 +08:00 [INF] Worker.SaveMessage 已保存14条数据
    
    2020-11-04 17:13:09.936 +08:00 [INF] Save Message Worker running at: 2020/11/4 17:13:09
    
    2020-11-04 17:13:09.938 +08:00 [INF] Worker.SaveMessage 已保存15条数据
    
    2020-11-04 17:13:10.948 +08:00 [INF] Save Message Worker running at: 2020/11/4 17:13:10
    
    2020-11-04 17:13:10.949 +08:00 [INF] Worker.SaveMessage 已保存16条数据
    

    运行时效果如下:

    有颜色显示的 控制台 还是不错的

    打包

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    https://go.microsoft.com/fwlink/?LinkID=208121. 
    -->
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <Configuration>Release</Configuration>
        <Platform>Any CPU</Platform>
        <PublishDir>binpublish</PublishDir>
        <PublishProtocol>FileSystem</PublishProtocol>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <RuntimeIdentifier>win-x64</RuntimeIdentifier>
        <SelfContained>true</SelfContained>
        <PublishSingleFile>False</PublishSingleFile>
        <PublishReadyToRun>True</PublishReadyToRun>
        <PublishTrimmed>True</PublishTrimmed>
      </PropertyGroup>
    </Project>
    

    部署

    找到相应的文件夹
    TopshelfDemo.exe install

    启动 TopshelfDemo
    TopshelfDemo.exe start

    卸载 TopshelfDemo
    TopshelfDemo.exe uninstall

    总体来说 使用非常简单

    demo 地址

    https://github.com/wannvmi/TopshelfDemo

  • 相关阅读:
    两条线路,如何选
    Eczema
    Eczema
    healing psoriasis -151
    12/30/2019
    how sales area determined for returns vendor?
    [转]SAP LSMW 不能为勾选供应商采购组织视图'Returns Vendor’选项然后维护运达方做录屏...
    通过RFC获取其他SAP系统的数据
    goturkey
    Instant Client 配置
  • 原文地址:https://www.cnblogs.com/WNpursue/p/13927020.html
Copyright © 2011-2022 走看看