ASP.NET MVC 网站发布全流程教程
本教程将涵盖以下核心步骤:

(图片来源网络,侵删)
- 准备工作: 确保你的项目可以成功构建。
- 发布配置: 在 Visual Studio 中配置发布设置。
- 选择发布目标: 选择合适的部署方式(文件系统、FTP、Web Deploy)。
- 部署到 IIS: 详细讲解如何在 Windows Server 的 IIS 上托管你的网站。
- 发布后配置: 处理连接字符串、权限和 URL 重写等关键问题。
- 高级主题: 介绍持续集成/持续部署。
第一步:准备工作 - 确保项目可以构建
在发布之前,最重要的一步是确保你的项目在本地可以成功编译和运行。
-
生成解决方案:
- 在 Visual Studio 中,右键点击你的解决方案(Solution),选择 “生成” (Build) -> “生成解决方案” (Build Solution)。
- 检查“输出”窗口(Output Window),确保没有编译错误,如果有错误,请先修复它们。
-
更新 NuGet 包:
- 右键点击解决方案资源管理器中的 “解决方案”,选择 “管理解决方案的 NuGet 程序包...” (Manage NuGet Packages for Solution...)。
- 切换到 “更新” (Updates) 选项卡,检查并更新所有过时的包,这可以避免因版本不兼容导致的部署问题。
-
配置发布配置文件 (可选但推荐):
(图片来源网络,侵删)- 在 Visual Studio 的解决方案资源管理器中,右键点击你的项目,选择 “发布” (Publish)。
- 这时会打开发布向导,我们先不急着配置,先在左侧的 “配置” (Configuration) 下拉菜单中,确保选择了 “Release” 模式,Release 模式会优化代码、移除调试信息,并排除
appsettings.Development.json等开发环境配置文件。
第二步:配置发布设置
我们正式开始配置发布流程。
-
打开发布向导:
- 在解决方案资源管理器中,右键点击你的项目,选择 “发布” (Publish)。
-
选择发布目标:
- Visual Studio 会提供几个预设的目标:
- Azure App Service: 如果你的网站部署在微软云上,这是最简单的方式。
- IIS, FTP/S, 等等: 这是传统部署方式,我们重点讲解这个。
- 文件夹: 将所有文件发布到本地的一个文件夹,方便你之后手动上传到服务器。
- 对于大多数自托管服务器,选择 “文件夹” 是一个很好的起点,因为它最简单,不依赖服务器端的特定服务,之后我们再讲解如何使用 “Web Deploy” 直接部署到 IIS。
- Visual Studio 会提供几个预设的目标:
-
配置文件夹发布:
(图片来源网络,侵删)- 选择 “文件夹”,然后点击 “配置”。
- 目标位置: 选择一个本地文件夹,
C:\Publish\MyWebApp,Visual Studio 会将所有编译好的文件复制到这个文件夹。 - 配置: 保持默认的 “Release”。
- 目标框架: 确保选择你的项目所针对的 .NET 版本(如 .NET 6.0, .NET 8.0 等)。
- 文件发布选项:
- 删除目标文件夹中的额外文件: 强烈建议勾选此项,这可以确保你的部署是最干净的,避免删除旧文件后遗留的冗余文件。
- 点击 “保存”。
-
执行发布:
- 点击右上角的 “发布” (Publish) 按钮。
- Visual Studio 会开始编译项目,并将所有必要的文件(包括
.dll,.html,.css,.js和web.config)复制到你指定的目标文件夹中。 - 发布成功后,VS 会自动打开该文件夹。
第三步:将文件部署到服务器 (以 IIS 为例)
你已经有了发布好的文件包,我们需要将这些文件放到 Web 服务器上,并配置 IIS 来托管它。
A. 准备 Windows Server 和 IIS
-
安装 IIS:
- 在你的 Windows Server 上,打开 “服务器管理器” (Server Manager)。
- 点击 “添加角色和功能” (Add Roles and Features),按照向导进行。
- 在 “角色” (Roles) 步骤,勾选 “Web 服务器 (IIS)”。
- 在 “角色服务” (Role Services) 步骤,确保至少勾选了以下服务:
- 应用程序开发
- ASP.NET (勾选与你 .NET 版本对应的,如 ASP.NET 4.5, ASP.NET 4.8, 或 ASP.NET Core Module)
- .NET Extensibility
- 常见 HTTP 功能
- 默认文档
- HTTP 重定向
- 应用程序开发
- 完成安装。
-
打开防火墙端口:
- 在 Windows 防火墙中,确保 HTTP (端口 80) 和 HTTPS (端口 443) 的入站规则是允许的。
B. 创建网站
-
复制文件:
- 将上一步中发布好的文件夹(
C:\Publish\MyWebApp)中的所有内容,复制到服务器的某个位置,C:\inetpub\wwwroot\MyWebApp。
- 将上一步中发布好的文件夹(
-
在 IIS 中创建网站:
- 打开 IIS 管理器。
- 在左侧的连接面板中,右键点击 “网站” (Sites),选择 “添加网站...” (Add Website...)。
- 网站名称: 输入一个易于识别的名称,如
MyMvcApp。 - 物理路径: 浏览并选择你刚刚复制文件的文件夹,
C:\inetpub\wwwroot\MyWebApp。 - 类型: 选择 “无” (No),因为我们没有为它分配一个特定的应用程序池。
- 应用程序池: 选择一个与应用程序兼容的应用程序池,对于 ASP.NET Core,选择
No Managed Code或一个新建的 .NET Core 池,对于传统的 ASP.NET MVC,选择ASP.NET v4.0(或对应版本)。 - 端口: 默认是 80,如果你的 80 端口已被占用,可以换一个,如 8080。
- 主机名: 留空,表示通过服务器的 IP 地址访问,如果你想通过域名访问,在这里输入你的域名(如
www.mydomain.com)。 - 点击 “确定”。
-
测试网站:
- 在 IIS 管理器中,选中你刚刚创建的网站。
- 在右侧的 “操作” (Actions) 面板中,点击 “浏览 :80” (Browse :80)。
- 如果一切正常,你应该能看到你的网站首页。
第四步:发布后关键配置
部署后,你很可能会遇到一些问题,以下是最常见的几个及解决方案。
连接字符串
你的 appsettings.json (或 web.config) 中可能包含本地数据库的连接字符串,发布后,必须修改为生产环境的连接字符串。
-
对于传统 ASP.NET MVC (使用
web.config):- 在 IIS 管理器中,选中你的网站。
- 双击 “配置编辑器” (Configuration Editor)。
- 从 “节” (Section) 下拉菜单中选择
appSettings。 - 在右侧的集合中,找到你的数据库连接字符串键(如
DefaultConnection),点击右侧的省略号 。 - 将
value修改为你的生产数据库连接字符串。
-
对于 ASP.NET Core (使用
appsettings.json):- 最佳实践: 不要直接修改
appsettings.json,而是创建一个appsettings.Production.json文件,将生产环境的配置放在里面,ASP.NET Core 会自动根据环境变量ASPNETCORE_ENVIRONMENT来加载对应的配置文件。 - 在服务器上设置环境变量:
- 在服务器上,打开“系统属性” -> “高级” -> “环境变量”。
- 在“系统变量”部分,点击“新建...”。
- 变量名:
ASPNETCORE_ENVIRONMENT - 变量值:
Production - 点击确定。
- 将你的
appsettings.json和新创建的appsettings.Production.json文件一起复制到服务器上。
- 最佳实践: 不要直接修改
文件夹权限
如果你的网站需要上传文件(如用户头像、附件等),必须为存放这些文件的文件夹设置正确的 IIS 用户权限。
- 在服务器上,找到你需要授权的文件夹(
C:\inetpub\wwwroot\MyWebApp\Uploads)。 - 右键点击文件夹,选择 “属性” -> “安全” 选项卡。
- 点击 “编辑” -> “添加”。
- 输入
IIS_IUSRS,然后点击“检查名称”并“确定”,这是 IIS 的匿名用户组。 - 选中
IIS_IUSRS,在下方权限列表中,勾选 “修改” (Modify) 和 “写入” (Write)。 - 点击“确定”。
URL 重写
如果你的网站使用了路由(如 /Home/About),但访问时出现 404 错误,通常是 IIS 没有配置好处理这些非物理文件的请求。
-
对于传统 ASP.NET MVC:
- 在 IIS 管理器中,确保你的网站已安装 “URL Rewrite” 模块。
- 选中你的网站,双击 “URL 重写”。
- 在右侧操作面板,点击 “添加规则...”。
- 选择 “请求的 URL” -> “忽略的 URL”,点击“确定”,这会告诉 IIS 不要处理 MVC 的路由请求,而是交给 ASP.NET 处理。
-
对于 ASP.NET Core:
- ASP.NET Core 应用程序通常会自动处理这个问题,如果遇到问题,请确保你的
Startup.cs(或Program.cs) 中正确配置了路由,web.config文件中包含了aspNetCore处理程序节,这个web.config文件会在你发布 ASP.NET Core 项目时自动生成。
- ASP.NET Core 应用程序通常会自动处理这个问题,如果遇到问题,请确保你的
第五步:高级主题 - 使用 Web Deploy 直接发布
手动复制文件和配置 IIS 稍显繁琐,使用 Web Deploy 可以实现一键式发布,Visual Studio 会自动完成文件传输和 IIS 配置。
-
在服务器上安装 Web Deploy:
- 从微软官网下载并安装 Web Deploy,安装时,请确保勾选了“管理服务”选项。
-
在 Visual Studio 中配置 Web Deploy 发布:
- 再次打开项目的 “发布” 向导。
- 这次选择 “IIS, FTP/S, 等等...”。
- 选择 “Web Deploy” 作为发布方法。
- 点击 “发布”,然后填写服务器信息:
- 服务器: 你的服务器 IP 地址或域名。
- 站点名称: 你在 IIS 中创建的网站名称(如
MyMvcApp)。 - 用户名: 一个有服务器管理员权限或 IIS 管理权限的账户。
- 密码: 对应的密码。
- Visual Studio 会自动检测你的 IIS 站点并填充大部分信息。
- 点击 “发布”,Visual Studio 会将文件传输到服务器并自动配置好网站。
总结与最佳实践
- 始终从 Release 模式发布: 避免部署调试代码和配置。
- 使用环境配置文件: 为开发、测试和生产环境分别配置
appsettings.json文件,并通过环境变量来切换。 - 版本控制: 将你的项目代码和部署脚本(如果有的话)都放在 Git 等版本控制系统中。
- 考虑 CI/CD: 对于更专业的项目,使用 GitHub Actions, Azure DevOps 或 Jenkins 等工具实现自动化构建和部署,可以大大提高效率和可靠性。
- 安全第一: 不要在生产环境中使用默认的连接字符串或密码,定期更新你的服务器和应用程序。
希望这份详细的教程能帮助你顺利完成 ASP.NET MVC 网站的发布!如果在某个步骤遇到问题,请仔细检查错误信息,通常问题都出在权限、连接字符串或 IIS 模块缺失上。
