如何将目标框架为netcoreapp2.0的ASP.NET Core Web API部署为Windows服务?
把netcoreapp2.0的ASP.NET Core Web API部署为Windows服务的步骤
没问题,我刚好有过netcoreapp2.0部署Windows服务的实战经验,给你一步步拆解操作:
1. 安装Windows服务支持包
首先要给项目安装专门的NuGet包,用来让Kestrel支持Windows服务托管。打开包管理器控制台或者用dotnet CLI执行:
Install-Package Microsoft.AspNetCore.Hosting.WindowsServices
或者直接在你的.csproj文件里添加以下引用:
<PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="2.0.0" />
2. 修改Program.cs配置服务托管逻辑
接下来要调整Program类的代码,让应用既能在控制台运行(方便调试),又能作为Windows服务启动。示例代码如下:
using System; using System.Diagnostics; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; namespace YourWebApiNamespace { public class Program { public static void Main(string[] args) { // 判断是否以服务模式运行:如果没调试且没有--console参数,就作为服务启动 var runAsService = !(Debugger.IsAttached || args.Contains("--console")); var webHostBuilder = WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); if (runAsService) { // 启用Windows服务托管支持 webHostBuilder.UseWindowsService(); } var host = webHostBuilder.Build(); if (runAsService) { // 以服务方式运行 host.RunAsService(); } else { // 控制台运行,方便调试 host.Run(); } } } }
这段代码的好处是:本地开发时可以直接F5调试(Debugger.IsAttached为true),或者在命令行加--console参数启动,就能看到控制台日志;部署到服务器后,不加参数就会自动以服务模式运行。
3. 发布应用
用dotnet CLI发布Release版本到指定文件夹:
dotnet publish -c Release -o C:\Deploy\MyWebApiService
发布完成后,目标文件夹里会包含所有运行需要的文件。
4. 创建并管理Windows服务
用Windows的sc命令来创建服务(需要以管理员身份打开命令提示符):
# 创建服务,注意binPath=后面必须有空格,路径指向你的API DLL文件 sc create "MyWebApiService" binPath= "C:\Deploy\MyWebApiService\YourWebApi.dll" DisplayName= "我的WebAPI服务"
创建成功后,就可以管理服务了:
- 启动服务:
sc start MyWebApiService - 停止服务:
sc stop MyWebApiService - 删除服务:
sc delete MyWebApiService
额外注意事项
- 权限配置:默认服务以LocalSystem账户运行,如果你的API需要访问特定资源(比如数据库、文件系统),可以在服务的属性里修改运行账户,赋予相应权限。
- 日志排查:服务运行时看不到控制台输出,建议配置日志系统。最简单的是添加事件日志支持,在WebHostBuilder里加上:
webHostBuilder.ConfigureLogging(logging => { logging.AddEventLog(); });
之后可以在Windows的「事件查看器」→「Windows日志」→「应用程序」里查看服务日志。
- 调试技巧:如果服务启动失败,先尝试用
--console参数在命令行启动,看看有没有报错信息,这样能快速定位问题。
内容的提问来源于stack exchange,提问作者Bryan
相关产品推荐
相关产品推荐

