ASP.NET MVC 网站发布全流程教程

本教程将涵盖以下核心步骤:

asp.net mvc网站发布教程
(图片来源网络,侵删)
  1. 准备工作: 确保你的项目可以成功构建。
  2. 发布配置: 在 Visual Studio 中配置发布设置。
  3. 选择发布目标: 选择合适的部署方式(文件系统、FTP、Web Deploy)。
  4. 部署到 IIS: 详细讲解如何在 Windows Server 的 IIS 上托管你的网站。
  5. 发布后配置: 处理连接字符串、权限和 URL 重写等关键问题。
  6. 高级主题: 介绍持续集成/持续部署。

第一步:准备工作 - 确保项目可以构建

在发布之前,最重要的一步是确保你的项目在本地可以成功编译和运行。

  1. 生成解决方案:

    • 在 Visual Studio 中,右键点击你的解决方案(Solution),选择 “生成” (Build) -> “生成解决方案” (Build Solution)
    • 检查“输出”窗口(Output Window),确保没有编译错误,如果有错误,请先修复它们。
  2. 更新 NuGet 包:

    • 右键点击解决方案资源管理器中的 “解决方案”,选择 “管理解决方案的 NuGet 程序包...” (Manage NuGet Packages for Solution...)
    • 切换到 “更新” (Updates) 选项卡,检查并更新所有过时的包,这可以避免因版本不兼容导致的部署问题。
  3. 配置发布配置文件 (可选但推荐):

    asp.net mvc网站发布教程
    (图片来源网络,侵删)
    • 在 Visual Studio 的解决方案资源管理器中,右键点击你的项目,选择 “发布” (Publish)
    • 这时会打开发布向导,我们先不急着配置,先在左侧的 “配置” (Configuration) 下拉菜单中,确保选择了 “Release” 模式,Release 模式会优化代码、移除调试信息,并排除 appsettings.Development.json 等开发环境配置文件。

第二步:配置发布设置

我们正式开始配置发布流程。

  1. 打开发布向导:

    • 在解决方案资源管理器中,右键点击你的项目,选择 “发布” (Publish)
  2. 选择发布目标:

    • Visual Studio 会提供几个预设的目标:
      • Azure App Service: 如果你的网站部署在微软云上,这是最简单的方式。
      • IIS, FTP/S, 等等: 这是传统部署方式,我们重点讲解这个。
      • 文件夹: 将所有文件发布到本地的一个文件夹,方便你之后手动上传到服务器。
    • 对于大多数自托管服务器,选择 “文件夹” 是一个很好的起点,因为它最简单,不依赖服务器端的特定服务,之后我们再讲解如何使用 “Web Deploy” 直接部署到 IIS。
  3. 配置文件夹发布:

    asp.net mvc网站发布教程
    (图片来源网络,侵删)
    • 选择 “文件夹”,然后点击 “配置”
    • 目标位置: 选择一个本地文件夹,C:\Publish\MyWebApp,Visual Studio 会将所有编译好的文件复制到这个文件夹。
    • 配置: 保持默认的 “Release”
    • 目标框架: 确保选择你的项目所针对的 .NET 版本(如 .NET 6.0, .NET 8.0 等)。
    • 文件发布选项:
      • 删除目标文件夹中的额外文件: 强烈建议勾选此项,这可以确保你的部署是最干净的,避免删除旧文件后遗留的冗余文件。
    • 点击 “保存”
  4. 执行发布:

    • 点击右上角的 “发布” (Publish) 按钮。
    • Visual Studio 会开始编译项目,并将所有必要的文件(包括 .dll, .html, .css, .jsweb.config)复制到你指定的目标文件夹中。
    • 发布成功后,VS 会自动打开该文件夹。

第三步:将文件部署到服务器 (以 IIS 为例)

你已经有了发布好的文件包,我们需要将这些文件放到 Web 服务器上,并配置 IIS 来托管它。

A. 准备 Windows Server 和 IIS

  1. 安装 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 重定向
    • 完成安装。
  2. 打开防火墙端口:

    • 在 Windows 防火墙中,确保 HTTP (端口 80)HTTPS (端口 443) 的入站规则是允许的。

B. 创建网站

  1. 复制文件:

    • 将上一步中发布好的文件夹(C:\Publish\MyWebApp)中的所有内容,复制到服务器的某个位置,C:\inetpub\wwwroot\MyWebApp
  2. 在 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)。
    • 点击 “确定”
  3. 测试网站:

    • 在 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 来加载对应的配置文件。
    • 在服务器上设置环境变量:
      1. 在服务器上,打开“系统属性” -> “高级” -> “环境变量”。
      2. 在“系统变量”部分,点击“新建...”。
      3. 变量名: ASPNETCORE_ENVIRONMENT
      4. 变量值: Production
      5. 点击确定。
    1. 将你的 appsettings.json 和新创建的 appsettings.Production.json 文件一起复制到服务器上。

文件夹权限

如果你的网站需要上传文件(如用户头像、附件等),必须为存放这些文件的文件夹设置正确的 IIS 用户权限。

  1. 在服务器上,找到你需要授权的文件夹(C:\inetpub\wwwroot\MyWebApp\Uploads)。
  2. 右键点击文件夹,选择 “属性” -> “安全” 选项卡。
  3. 点击 “编辑” -> “添加”
  4. 输入 IIS_IUSRS,然后点击“检查名称”并“确定”,这是 IIS 的匿名用户组。
  5. 选中 IIS_IUSRS,在下方权限列表中,勾选 “修改” (Modify)“写入” (Write)
  6. 点击“确定”。

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 项目时自动生成。

第五步:高级主题 - 使用 Web Deploy 直接发布

手动复制文件和配置 IIS 稍显繁琐,使用 Web Deploy 可以实现一键式发布,Visual Studio 会自动完成文件传输和 IIS 配置。

  1. 在服务器上安装 Web Deploy:

    • 从微软官网下载并安装 Web Deploy,安装时,请确保勾选了“管理服务”选项。
  2. 在 Visual Studio 中配置 Web Deploy 发布:

    • 再次打开项目的 “发布” 向导。
    • 这次选择 “IIS, FTP/S, 等等...”
    • 选择 “Web Deploy” 作为发布方法。
    • 点击 “发布”,然后填写服务器信息:
      • 服务器: 你的服务器 IP 地址或域名。
      • 站点名称: 你在 IIS 中创建的网站名称(如 MyMvcApp)。
      • 用户名: 一个有服务器管理员权限或 IIS 管理权限的账户。
      • 密码: 对应的密码。
    • Visual Studio 会自动检测你的 IIS 站点并填充大部分信息。
    • 点击 “发布”,Visual Studio 会将文件传输到服务器并自动配置好网站。

总结与最佳实践

  1. 始终从 Release 模式发布: 避免部署调试代码和配置。
  2. 使用环境配置文件: 为开发、测试和生产环境分别配置 appsettings.json 文件,并通过环境变量来切换。
  3. 版本控制: 将你的项目代码和部署脚本(如果有的话)都放在 Git 等版本控制系统中。
  4. 考虑 CI/CD: 对于更专业的项目,使用 GitHub Actions, Azure DevOps 或 Jenkins 等工具实现自动化构建和部署,可以大大提高效率和可靠性。
  5. 安全第一: 不要在生产环境中使用默认的连接字符串或密码,定期更新你的服务器和应用程序。

希望这份详细的教程能帮助你顺利完成 ASP.NET MVC 网站的发布!如果在某个步骤遇到问题,请仔细检查错误信息,通常问题都出在权限、连接字符串或 IIS 模块缺失上。