惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
GbyAI
GbyAI
L
LangChain Blog
B
Blog
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
U
Unit 42
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
雷峰网
雷峰网
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
小众软件
小众软件
I
InfoQ
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
C
Check Point Blog

博客园 - 石曼迪

Visual Studio 2026 开发 MAUI app 记录 Windows下搭建rustdesk远程服务 nginx 二级域名配置 .NET CORE 相关配置 frps-frpc配置 使用SuperSocket开发联网斗地主(四):出牌 使用SuperSocket开发联网斗地主(三):抢地主 使用SuperSocket开发联网斗地主(二):发牌 使用SuperSocket开发联网斗地主(一):联网 SuperSocket服务端与客户端搭建 EXCEL脚本收藏 小程序开发记录 Python练习 Python基础总结 在centos7.6上部署.netcore 3.0 web程序 最简单的centos上安装Nginx办法 七牛网数据备份 solr搜索分词优化 Ionic异常及解决 狗日的腾讯
.net core web api 发布填坑
石曼迪 · 2026-06-26 · via 博客园 - 石曼迪

部署为 Windows 服务(最直接)

如果你的服务器是 Windows 系统,这是最推荐的方案。应用会像 SQL Server 一样在后台运行,开机自启、不会因误关控制台而中断

有种常用的实现方法:

  • 使用 Microsoft.Extensions.Hosting.WindowsServices 库(官方推荐)
    这是最优雅、最“.NET Core”的方式。只需在代码中做微小改动,就能让应用以Windows服务的方式运行

    1. 在项目的 Program.cs 中,为宿主构建器添加 .UseWindowsService() 扩展方法

    2. (关键步骤) 为避免服务运行时找不到文件,需要手动设置内容根目录

      var options_args = new WebApplicationOptions
      {
          Args = args,
          ContentRootPath = WindowsServiceHelpers.IsWindowsService() 
                             ? AppContext.BaseDirectory 
                             : default
      };
      var builder = WebApplication.CreateBuilder(options_args);
      builder.Host.UseWindowsService(); 
      
    3. 发布应用后,使用管理员权限打开命令行,通过 sc create 命令创建服务

      # 1. 停止并删除旧服务
      sc stop 你的服务名
      sc delete 你的服务名
      
      # 2. 用正确的路径重新创建服务
      sc create 你的服务名 binPath= "D:\MyApp\publish\MyApp.exe" start= auto

      注释要去掉

    4. 然后发现部署成功了,但只能localhost访问,在项目根目录的 appsettings.json 文件中添加以下配置
      {
        "Kestrel": {
          "Endpoints": {
            "Http": {
              "Url": "http://*:5000"
            }
          }
        }
      }

      当然,防火墙要放开端口