ASP.NET Web 应用程序项目部署常见问题

本主题提供了有关如何部署 Web 应用程序项目的常见问题的答案。

许多答案将指导您通过编辑项目文件来更改部署设置。 有关如何执行此操作的信息,请参见如何:在项目文件中编辑部署设置

本主题包含以下各节:

  • 我是否能从部署中排除特定文件或文件夹?

  • 我是否能调整“输出”窗口中显示的有关打包或发布进度的详细信息量?

  • 我是否能部署数据库的全文目录?

  • 我是否能在自定义部署脚本中引用系统生成的数据库对象?

  • 我是否能通过一键式发布在 HTTPS 上使用远程代理服务?

  • 我是否能将 Web 部署 tempAgent 提供程序设置与一键式发布配合使用?

  • 我是否能在因忘记某些内容而必须重新开始时中断打包或发布?

  • 一键式发布是否能创建用于存档的包?

  • 我是否能指定应在每次生成解决方案时创建包?

  • 我是否能更改 Visual Studio 创建部署包的默认位置?

  • 我是否能配置委托规则,使开发人员能够部署到临时服务器而不更改 IIS 设置?

  • 为什么当我在部署期间运行自定义脚本时会收到 SQL 超时错误?

  • 为什么我在已安装 ASP.NET 4 的情况下会收到一个表示需要 ASP.NET 4 的错误?

  • 我应如何纠正此错误 - 尚未提供“sitemanifest...” 的流数据?

  • 为什么部署在尝试执行 CREATE USER 或 CREATE ROLE 数据库命令时会失败?

  • 我是否能创建单个包并将其用来同时部署到 IIS 6 和 IIS 7?

  • 如何部署一个使用 SQL Server Compact 的 ASP.NET Razor 项目?

  • 我是否可以在 Visual Studio 中使用 .publishsettings 文件?

我是否能从部署中排除特定文件或文件夹?

可通过选中**“打包/发布 Web”选项卡上的“仅限运行此应用程序所需的文件”“此项目中的所有文件”选项来限制部署的文件。 如果您选择“此项目中的所有文件”选项,则可通过右击“解决方案资源管理器”中的某个文件并选择“从项目中排除”**来阻止部署该文件。

如果这些选项对您来说不够灵活,则编辑项目文件并在适当的 PropertyGroup 元素中添加 ExcludeFilesFromDeployment 元素和/或 ExcludeFoldersFromDeployment 元素。 在每个元素中,可指定一个名称,也可以指定由分号 (;) 分隔的多个名称。 下面的示例演示针对“Debug”生成配置的 PropertyGroup 元素:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <ExcludeFilesFromDeployment>
    File1.aspx;File2.aspx
  </ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>
    Folder1;Folder2
  </ExcludeFoldersFromDeployment>
  <!-- Other settings -->
</PropertyGroup> 

返回页首

我是否能调整“输出”窗口中显示的有关打包或发布进度的详细信息量?

打包和发布详细级别由确定 MSBuild 详细级别的同一 Visual Studio 设置控制。 从主菜单中,选择**“工具”,再选择“选项”。 在“选项”对话框中展开“项目和解决方案”,然后选择“生成并运行”。 随后将显示“MSBuild 项目生成输出详细信息”**下拉列表,您可以从该列表中选择下列选项之一:

  • 安静

  • 最低

  • 正常

  • 详细

  • 诊断

这些选项与当您从命令行运行 MSBuild 时,可通过使用 /verbosity 或 /v 标志设置的内容相对应。 有关 MSBuild 命令行标志的更多信息,请参见 MSBuild 命令行参考

返回页首

我是否能部署数据库的全文目录?

默认情况下,Visual Studio 自动为部署生成的每个脚本都将在事务中运行。 部署全文目录的脚本无法在事务中成功运行。 因此,默认情况下,Visual Studio 不会为全文目录创建脚本。

若要更改部署,使其包括全文目录,请编辑项目文件并进行以下更改:

  • 将自动生成的脚本的 Source 元素的 Transacted 特性设置为 False。

  • 将自动生成的脚本的 PreSource 元素的 CopyAllFullTextCatalogs 特性设置为 True。

返回页首

我是否能在自定义部署脚本中引用系统生成的数据库对象?

默认状态下,当您指定 Visual Studio 应自动生成脚本以部署数据库结构时,目标数据库中会为系统生成的对象(例如,约束)生成新名称。 如果您编写某个自定义脚本以修改或删除其中某个对象,并且如果您指定源数据库中为该脚本生成的名称,则该脚本在目标数据库中运行时可能会失败。

可以指定目标数据库中的系统生成对象的名称应与源数据库中的系统生成对象的名称相同。 为此,编辑项目文件并向自动生成的脚本的 PreSource 元素中添加以下特性:

DriIncludeSystemNames="True"

返回页首

我是否能通过一键式发布在 HTTPS 上使用远程代理服务?

不能。 当您在**“发布 Web”**对话框的“服务 URL”文本框中输入一个 HTTPS URL 时,Visual Studio 将自动使用 Windows 管理服务。 若要使用 HTTPS,建议您使用 Windows 管理服务。

返回页首

我是否能将 Web 部署 tempAgent 提供程序设置与一键式发布配合使用?

不能。 若要使用 tempAgent 提供程序设置,您必须使用 Web 部署命令行或使用 Visual Studio 在创建部署包时生成的 deploy.cmd 文件。

返回页首

我是否能在因忘记某些内容而必须重新开始时中断打包或发布?

是。 按 Ctrl-Break。 打包或发布过程将停止。 当您重新启动时,Visual Studio 将从停止处启动,而不会重做尚未完成的任何工作。

返回页首

一键式发布是否能创建用于存档的包?

是。 编辑项目文件并在相应的 PropertyGroup 元素中添加 CreatePackageOnPublish 元素,如以下示例所示:

<CreatePackageOnPublish>True</CreatePackageOnPublish>

返回页首

我是否能指定应在每次生成解决方案时创建包?

是。 编辑项目文件并在相应的 PropertyGroup 元素中添加 DeployOnBuild 元素。 下面的示例演示针对“Release”生成配置的 PropertyGroup 元素:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DeployOnBuild>True</DeployOnBuild>
  <!-- Additional settings -->
</PropertyGroup>

还必须将 DeployDefaultTarget 元素设置为 Package。 但此操作是可选的,因为该值是默认值。

返回页首

我是否能更改 Visual Studio 创建部署包的默认位置?

是。 编辑项目文件并在相应的 PropertyGroup 元素中添加 IntermediateOutputPath 元素。 下面的示例演示针对“Release”生成配置的 PropertyGroup 元素:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <IntermediateOutputPath>Path</IntermediateOutputPath>
  <!-- Additional settings -->
</PropertyGroup>

将 Path 替换为要在其中创建与部署包关联的所有文件的文件夹的完整 path。

返回页首

我是否能配置委托规则,使开发人员能够部署到临时服务器而不更改 IIS 设置?

可以在 IIS 7 及更高版本中做到这一点。 有关委托部署权限的信息,请参见以下主题:

返回页首

为什么当我在部署期间运行自定义脚本时会收到 SQL 超时错误?

运行混合了事务模式的多个脚本会导致超时错误。 默认情况下,自动生成的脚本在事务中运行。 但是,自定义脚本不在事务中运行。 因此,如果您选择**“打包/发布 SQL”选项卡上的“从现有数据库中抽取数据和/或架构”**选项,并且如果您添加自定义 SQL 脚本,则必须更改某些脚本上的事务设置,使所有脚本都使用相同的事务设置。 有关更多信息,请参见如何:使用 Web 应用程序项目来部署数据库

返回页首

为什么我在已安装 ASP.NET 4 的情况下会收到一个表示需要 ASP.NET 4 的错误?

若要部署 ASP.NET 4 Web 应用程序,则必须在目标服务器上将 ASP.NET 4 注册到 IIS。 此外,必须将要部署到 IIS 网站的应用程序池分配给 .NET Framework 4。 如果未满足上述任一条件,则当您尝试部署时可能会看到下列错误之一:

  • 默认 .NET 4.0 应用程序池不存在,或者无法添加应用程序。 请验证此计算机上是否安装了 ASP.NET 4.0。

  • 您尝试使用的应用程序池已将“managedRuntimeVersion”属性设置为“v2.0”。 此应用程序需要“v4.0”。

在安装 Visual Studio 时将安装 ASP.NET 4。 但是,安装过程不会自动将 ASP.NET 4 注册到 IIS,并且不会自动将现有 IIS 网站分配给 .NET 4 应用程序池。 若要纠正此错误,请将 ASP.NET 注册到 IIS,并将目标 IIS 网站的应用程序池设置为包所需的 .NET Framework 版本。 有关如何注册 IIS 的信息,请参见 ASP.NET IIS 注册工具 (Aspnet_regiis.exe)

返回页首

我应如何纠正此错误 - 尚未提供“sitemanifest...”的流数据?

在某些方案中,如果您尝试通过将 deploy.cmd 文件与 t(测试)选项配合使用来安装某个包,则您将看到类似于以下示例的错误:

错误: 尚未提供“sitemanifest/dbFullSql[@path='C:\TEMP\AdventureWorksGrant.sql']/sqlScript”的流数据。

这意味着命令无法生成测试报告。 但是,此消息并不表示,在使用 y(实际安装)选项来运行命令时部署将失败。 此消息仅指示在测试模式下运行命令时存在问题。

返回页首

为什么部署在尝试执行 CREATE USER 或 CREATE ROLE 数据库命令时会失败?

此错误经常发生,因为您的数据库包含用户或角色,而您将使用不具有创建用户或角色的权限的凭据进行发布。 例如,托管公司可以将 db_datareader、 db_datawriter 和 db_ddladmin 角色分配给为您设置的用户帐户。 它们足以用来创建大多数数据库对象,但对于创建用户或角色却远远不够。 如果这是导致出现错误的原因,则您将看到与输出窗口中的以下消息类似的消息:

错误的位置大概在脚本的第“1”行和第“3”行之间。 详细日志中可能包含有关此错误的详细信息。 此命令开头为:

CREATE USER [user2] FOR LOGIN [user2] WITH DEFAULT

错误: 用户没有执行此操作的权限。

失败的命令也可能为 CREATE ROLE。 在此情况下,可通过从数据库部署中排除用户和角色来避免此错误。 可通过编辑数据库的自动生成脚本的 PreSource 元素以使其包含以下特性来做到这一点:

CopyAllUsers=false, CopyAllRoles=false

如果目标数据库中需包含开发数据库中的用户或角色,则请联系您的托管提供商以获取帮助。

返回页首

我是否能创建单个包并将其用来同时部署到 IIS 6 和 IIS 7?

如果满足下列任一条件,则可使用同一个包来部署到 IIS 6 和 IIS 7:

  • 您未选中**“打包/发布 Web”选项卡上的“包括在 IIS 管理器中配置的所有 IIS 设置”**选项。

  • 您选择了**“包括在 IIS 管理器中配置的所有 IIS 设置”**选项并在 IIS 6 上创建了包。

如果您选择了**“包括在 IIS 管理器中配置的所有 IIS 设置”**选项,则无法将包部署到在 IIS 7 上创建的 IIS 6。

如何部署一个使用 SQL Server Compact 的 ASP.NET Razor 项目?

可以通过在该项目的 Bin 文件夹中放置 ASP.NET Razor 和 SQL Server Compact 程序集来部署该项目。 若要在网站或 Web 应用程序项目中包含所需的程序集,请按以下步骤进行操作:

  1. 在**“解决方案资源管理器”中,右击项目名称,再单击“添加可部署的依赖项”**。

  2. 在**“添加可部署的依赖项”对话框中,选择“带有 Razor 语法的 ASP.NET Web Pages”“SQL Server Compact”**。

  3. 单击**“确定”**。

现在可以像部署任何其他项目一样部署 Web 项目。

我是否可以在 Visual Studio 中使用 .publishsettings 文件?

如果您的承载提供程序向您发送一个 .publishsettings 文件,则可通过将该文件放在项目根文件夹中,在 Visual Studio 中使用它。

请参见

概念

ASP.NET 部署内容映射