Skip to content
返回部署

部署 ASP.NET Core 应用

跨平台 .NET 应用打包为自包含可执行,部署到 Kestrel+Nginx、IIS 或 Azure App Service。

平台高级

为什么

ASP.NET Core 在 .NET 8+ 跨平台且性能优秀(TechEmpower 基准)。自包含发布含运行时,服务器无需装 .NET。Kestrel 是内置高性能 Web 服务器。

何时使用

企业 C# 后端、Windows 迁 Linux 和高性能 API 用 ASP.NET Core。容器部署选自包含。

如何做

1. 发布 — dotnet publish -c Release -r linux-x64 --self-contained 2. 运行 — ./MyApp,Kestrel 默认端口 5000 3. Docker — mcr.microsoft.com/dotnet/aspnet:8.0 运行时镜像 4. IIS — dotnet publish 配 web.config,用 ASP.NET Core Module 部署 IIS 5. Azure — az webapp up,或从 GitHub Actions 部署 6. Nginx — 反向代理 Kestrel 做 TLS 和静态 7. 健康 — MapHealthChecks("/health") 供 k8s 探针

示例

// Program.cs — 最小 API 含健康检查 var builder = WebApplication.CreateBuilder(args); builder.Services.AddHealthChecks(); var app = builder.Build(); app.MapHealthChecks("/health"); app.MapGet("/api", () => new { message = "hello" }); app.Run(); # Dockerfile — 多阶段 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /app COPY *.csproj . RUN dotnet restore COPY . . RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app COPY --from=build /app/out . EXPOSE 8080 ENTRYPOINT ["dotnet", "MyApp.dll"] # appsettings.Production.json { "ConnectionStrings": { "Default": "Host=db;Database=myapp;Username=postgres" }, "Logging": { "LogLevel": { "Default": "Warning" } } }

常见问题

  • ⚠服务器缺运行时 — 框架依赖部署未装 .NET,用 --self-contained
  • ⚠IIS 502.5 — ASP.NET Core Module 未装或 web.config processPath 错误
  • ⚠Kestrel 端口冲突 — 默认 5000 被占,设 ASPNETCORE_URLS=http://+:8080

最佳实践

  • ✓容器部署用 --self-contained — 主机无运行时依赖,完全可移植镜像
  • ✓生产启用响应压缩和静态文件缓存 — 显著性能提升
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答