使用 Visual Studio ASP.NET Web 部署:项目属性
作者 :Tom Dykstra
本教程系列介绍如何使用 Visual Studio 2012 或 Visual Studio 2010 将 (发布) ASP.NET Web 应用程序部署到Azure 应用服务 Web 应用或第三方托管提供程序。 有关该系列的信息,请参阅 系列中的第一个教程。
概述
某些部署选项在项目属性中配置,这些属性存储在项目文件中, (.csproj 或 .vbproj 文件) 。 在大多数情况下,这些设置的默认值是所需值,但如果需要更改这些设置,可以使用 Visual Studio 中内置的 项目属性 UI 来处理这些设置。 在本教程中,你将查看 项目属性中的部署设置。 还可以创建一个占位符文件,该文件会导致部署空文件夹。
在项目属性窗口中配置部署设置
发布配置文件中包含影响部署期间发生的情况的大多数设置,如以下教程所示。 应注意的一些设置位于“项目属性”窗口的“包/发布”选项卡中。 这些设置是为每个生成配置指定的,也就是说,发布版本的设置可以不同于调试版本的设置。
在“解决方案资源管理器”中,右键单击“ContosoUniversity”项目,选择“属性”,然后选择“打包/发布 Web”选项卡。
显示窗口时,它默认显示解决方案当前处于活动状态的生成配置的设置。 如果“ 配置 ”框未指示 “活动” (“发布”) ,请选择“ 发布 ”以显示“发布”生成配置的设置。 你将将发布版本部署到测试和生产环境。
选择 “Active (Release) ”或“ 发布 ”后,会看到使用发布生成配置进行部署时有效的值:
- 在“ 要部署的项 ”框中, 仅选择运行应用程序所需的文件 。 其他选项包括 此项目中的所有文件 或 此项目文件夹中的所有文件。 例如,通过将默认选择保持不变,可以避免部署源代码文件。 此设置是包含SQL Server Compact二进制文件的文件夹必须包含在项目中的原因。 有关此设置的详细信息,请参阅 ASP.NET Web 应用程序项目部署常见问题解答中的为什么未部署项目文件夹中的所有文件?
- 已选中“排除生成的调试符号”。 使用此生成配置时,不会进行调试。
- 已选择“包/发布 SQL”选项卡中配置的所有数据库。 指定 Visual Studio 是否将部署数据库和文件。 尽管“检查”框标签仅提及“包/发布 SQL”选项卡,但清除此检查框也会禁用在发布配置文件中配置的数据库部署。 稍后将执行此操作,因此检查框必须保持选中状态。 “ 打包/发布 SQL ”选项卡用于旧版数据库发布方法,这些教程中不会使用此方法。
- Web 部署包设置 部分不适用,因为在这些教程中使用了一键式发布。
将 “配置” 下拉框更改为“调试”以查看“调试”内部版本的默认设置。 这些值相同,但清除了 “排除生成的调试符号 ”,以便在部署调试版本时进行调试。
确保已部署 Elmah 文件夹
如上一教程所示, Elmah NuGet 包 提供错误日志记录和报告功能。 在 Contoso University 应用程序中,Elmah 已配置为将错误详细信息存储在名为 Elmah 的文件夹中:
从部署中排除特定文件或文件夹是一个常见要求;另一个示例是用户可以将文件上传到的文件夹。 你不希望将开发环境中创建的日志文件或上传的文件部署到生产环境。 如果要将更新部署到生产环境,则不希望部署过程删除生产中存在的文件。 (如果目标站点中存在文件,但在部署时源站点中存在文件,则 Web 部署会将其从 destination 中删除,具体取决于部署选项的设置方式。)
如本教程前面所述,“包/发布 Web”选项卡中的“要部署的项”选项设置为“仅运行此应用程序所需的文件”。 因此,将不会部署由 Elmah 在开发中创建的日志文件,这是你想要发生的。 (要部署,它们必须包含在项目中,并且其“生成操作”属性必须设置为“内容”。有关详细信息,请参阅 ASP.NET Web 应用程序项目部署常见问题解答) 中的为什么未部署项目文件夹中的所有文件? 但是,除非至少有一个文件要复制到目标站点,否则 Web 部署不会在目标站点中创建文件夹。 因此,需要向文件夹添加 一个.txt 文件以充当占位符,以便复制该文件夹。
在“解决方案资源管理器”中,右键单击“Elmah”文件夹,选择“添加新项”,然后创建名为 Placeholder.txt文本文件。 将以下文本放入其中:“这是一个占位符文件,以确保部署文件夹。”并保存该文件。 这是为了确保 Visual Studio 部署此文件及其中的文件夹而必须执行的所有操作,因为默认情况下,.txt文件的“生成操作”属性设置为“内容”。
总结
现已完成所有部署设置任务。 在下一教程中,你将将 Contoso University 站点部署到测试环境并在其中进行测试。