ASP.NET Core 部署方式对比
本文档对比了三种常见的 ASP.NET Core 应用(如你的 DingTalkApproval
项目)部署到 Windows 10 上 IIS 服务器的方式:dotnet publish
(手动部署)、Web Deploy(直接发布到 IIS)、Web Deploy 包(生成包后导入)。每种方式有其适用场景、优点和缺点。
1. 使用 dotnet publish
手动部署
描述
- 使用
dotnet publish
命令(或 Visual Studio 的文件夹发布)生成 Release 版本,手动将文件部署到 IIS 服务器。 - 示例命令:
dotnet publish -c Release -o c:\publish
。 - 在 Visual Studio 中:右键项目 -> 发布 -> 文件夹 ->
C:\publish
。
流程
- 运行
dotnet publish
或通过 Visual Studio 发布到本地文件夹(如C:\publish
)。 - 将发布文件复制到 IIS 服务器的目标目录(如
C:\PUBLISH\WEB
)。 - 配置 IIS 站点:
- 创建或选择一个站点,指向该文件夹。
- 将应用程序池设置为"无托管代码",使用集成模式。
- 通过访问站点并检查日志验证部署。
优点
- 灵活性高:完全控制发布文件和 IIS 配置。
- 无需额外工具:服务器只需安装 .NET 运行时和 ASP.NET Core Hosting Bundle。
- 适合测试:适合本地开发或小型项目。
缺点
- 手动操作多:需要手动复制文件和配置 IIS,容易出错。
- 耗时:相比自动化方式步骤更多。
- 易出错:配置(如权限、应用程序池)需手动设置。
2. Web Deploy(直接发布到 IIS)
描述
- 通过 Visual Studio 使用 Web Deploy 协议直接将应用发布到目标 IIS 服务器。
- Visual Studio 自动完成文件传输和 IIS 配置。
流程
- 在 Visual Studio 发布向导中选择"Web 服务器(IIS)"。
- 配置目标服务器:
- 输入服务器地址(IP 或域名)、站点名称、凭据。
- 验证连接。
- 点击"发布",Visual Studio 编译项目并通过 Web Deploy 传输文件到 IIS 服务器。
- Web Deploy 自动配置 IIS(如应用程序池、绑定等)。
优点
- 自动化程度高:一键发布,自动完成文件传输和配置。
- 效率高:无需手动操作,适合快速部署。
- 适合生产环境:减少人为错误。
缺点
- 网络依赖:需要开发机与目标服务器实时连接。
- 环境要求:目标服务器必须安装 Web Deploy 并启用 IIS 管理服务。
- 灵活性低:依赖实时连接,网络不稳定可能导致失败。
3. Web Deploy 包(生成包后导入)
描述
- Visual Studio 生成一个 Web Deploy 包(
.zip
文件,如DingTalkApproval.zip
),包含应用文件和部署配置,之后手动导入到 IIS。 - 在 IIS 管理器中通过"导入应用程序"功能完成部署。
流程
- 在 Visual Studio 发布向导中选择"Web 部署包"。
- 指定包保存路径(如
C:\DingTalkApproval.zip
)。 - 点击"发布",生成包含应用文件和配置的
.zip
文件。 - 将包传输到目标服务器,在 IIS 管理器中通过"部署" -> "导入应用程序"完成部署。
优点
- 离线部署:生成包后无需实时连接,可随时导入。
- 灵活性高:包可分发、存档,适合团队协作或批量部署。
- 标准化:包内可预定义配置(如应用程序池),便于统一部署。
缺点
- 额外步骤:需要手动导入,相比直接发布多一步操作。
- 环境要求:目标服务器仍需支持 Web Deploy。
- 前期准备:生成包可能需要额外配置(如通过 Visual Studio)。
对比总结
方面 | dotnet publish(手动部署) | Web Deploy(直接发布) | Web Deploy 包(生成包后导入) |
---|---|---|---|
操作方式 | 手动发布和配置 | 一键直接发布到 IIS | 先生成包,再手动导入 |
自动化程度 | 低,手动操作多 | 高,自动完成部署 | 中等,手动导入但配置自动化 |
网络要求 | 无需实时连接 | 需要实时连接 | 无需实时连接,离线传输即可 |
灵活性 | 高,可完全控制文件和配置 | 较低,依赖实时连接 | 较高,可存档、分发、延迟部署 |
适用场景 | 本地测试、小型项目 | 快速部署到测试/生产环境 | 开发者与运维分离、批量部署 |
环境依赖 | .NET 运行时、Hosting Bundle | 需安装 Web Deploy | 需支持 Web Deploy 导入 |