.net 5 Windows服务形式打包
1、为了将应用转换成Windows服务,我们需要引入一个包,如下:
Microsoft.Extensions.Hosting.WindowsServices
引用方式有以下两种比较方便的形式:
- 使用NuGet包管理器,在浏览中输入“Microsoft.Extensions.Hosting.WindowsServices”,搜索后选择比较稳定的版本(前提符合当前项目引用依赖)
- 使用程序包管理器控制台,选择需要安装的项目,执行以下语句:Install-Package Microsoft.Extensions.Hosting.WindowsServices
2、修改代码(读取配置请一定使用AppContext.BaseDirectory,要不然会导致无法读取配置的情况)
需要修改Program.cs文件,添加UseWindowsService()方法的调用。
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, builder) =>
{
Var path=Path.Combine(AppContext.BaseDirectory, "Helpers/Logger/Log4net.config");
builder.AddLog4Net(path);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseWindowsService();
}
在配置文件appsettings.json中添加节点 "urls": "http://*:8080" ,如果需要本地调试,可以将urls节点注释,就可以正常启动调试
3、发布
使用Visual Studio发布,请参考如下图所示:
当我们把发布好的文件在服务器保存好以后,管理员身份打开cmd,执行这条命令:
sc create 服务名称 binPath= "\"C:\program files\dotnet\dotnet.exe\" \"程序发布目录\"" DisplayName= "你的服务名称" start= auto
(重点:binPath、DisplayName、start这三个参数的等号后面必须带一个空格)
然后就可以在服务列表里看到启动的服务
sc start 服务名称 --启动服务
sc stop 服务名称 --停止服务
sc delete 服务名称 --删除服务
如果项目无法启动,可以通过系统日志查看日志。