使用Dotnet core编写Window Service程序实践
近年来,需要编写windows service的情况越来越少,但偶尔也会用到,比如计算机定期执行数据整理的任务等等
1、创建工程
我的习惯是建立三个工程,一个Windows Service主程序,一个Console主程序,一个业务逻辑库
使用dotnet core命令创建工程
首先,可以使用dotnet new --list命令查看可以创建的工程类型
dotnet new console -n test-app // 创建Console应用,名称为“test-app”(可选)
dotnet new worker -n xxxxService // 创建Worker Service应用,用于创建Windows服务
dotnet new classlib -n xxxxBll // 创建类库,用于编写业务逻辑代码(可选)
dotnet new sln -n xxxx // 创建解决方案
使用VS、VSCode或Rider等IDE打开解决方案,把项目添加到solution中,建立引用关系等操作。
注:Worker Service程序相对于以往的Windows Service开发,可以直接进行调试,小的工程也可以直接创建Worker,而无需创建test-app调试用工程与BLL类库。
2、业务逻辑编写与调试
设置test-app为启动项,可以方便的进行开发和调试,把业务逻辑代码都写到BLL中。
3、开发Windows Service
3.1、把Worker Service改造成Windows Service
1、在项目中添加nuget包:Microsoft.Extensions.Hosting.WindowsServices,选好对应版本。
例如,我的Microsoft.Extensions.Hosting版本是3.1.3,于是选择Microsoft.Extensions.Hosting.WindowsServices的版本为3.1.3
2、在program.cs内部,将UseWindowsService()添加到CreateHostBuilder
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
3、把BLL与Worker Service程序做好关联即可发布。