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

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

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

本主题包含以下各节:

可通过选中“打包/发布 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"

返回页首

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

返回页首

不能。 若要使用 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 但此操作是可选的,因为该值是默认值。

返回页首

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

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

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

返回页首

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

返回页首

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

返回页首

若要部署 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)

返回页首

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

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

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

返回页首

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

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

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

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

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

CopyAllUsers=false, CopyAllRoles=false

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

返回页首

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

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

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

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

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

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

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

  3. 单击“确定”

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

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

显示: