用于 Visual Studio 和 ASP.NET 的 Web 应用程序项目部署常见问题

通过使用以下产品,本主题回答有关如何的常见问题部署 Web 应用程序项目:

许多答案将指导您通过编辑发布配置文件(.pubxml)文件或wpp.targets文件更改部署设置。 有关如何执行此操作的信息,请参见如何:在 Visual Studio Web 项目中编辑发布配置文件 (.pubxml) 和 .wpp.targets 文件中的部署设置

本主题包含以下各节:

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

  • 原因"我的项目文件夹访问的文件部署的所有?

  • 我是否能包含特定文件或文件夹从我的项目文件夹之外?

  • 如何禁用Web.config转换?

  • 何时使用Web部署参数而不是Web.config转换?

  • 如何部署代码的第一个数据库,而不使用迁移?

  • 如何调试部署打包或发布过程?

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

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

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

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

  • 如何保留my从重新启动多次的应用程序域在较长的部署过程中?

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

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

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

  • 远程部署的原因。大文件失败,不过,本地部署成功?

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

可通过选中**“打包/发布 Web”选项卡上的“仅限运行此应用程序所需的文件”“此项目中的所有文件”选项来限制部署的文件。 如果您选择“此项目中的所有文件”选项,则可通过右击“解决方案资源管理器”中的某个文件并选择“从项目中排除”**来阻止部署该文件。 有关的更多信息文件被排除,当您使用 仅限运行此应用程序所需的文件此项目中的所有文件 选项时,请参见 原因"我的项目文件夹访问的文件部署的所有?。

如果这些选项对您来说不够灵活,请编辑该.pubxml或.wpp.targets文件并添加 ExcludeFilesFromDeployment 元素或 ExcludeFoldersFromDeployment 元素(或两者)在 PropertyGroup 元素。 在每个元素,可指定一个名称,也可以指定分号分隔的多个名称(;),如以下示例所示:

<PropertyGroup">
  <ExcludeFilesFromDeployment>
    File1.aspx;File2.aspx
  </ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>
    Folder1;Folder2
  </ExcludeFoldersFromDeployment>
</PropertyGroup> 

有关更多信息,请参见中Sayed Hashimi的博客上的以下文章:

  1. Web部署工具(MSDeploy):生成包包含附加文件或排除特定文件

  2. Web部署工具(MSDeploy):如何根据配置的包排除文件

返回页首

原因"我的项目文件夹访问的文件部署的所有?

项目 菜单中选择 打包/发布设置 打开 项目属性 窗口的 打包/发布 Web 选项。 在标记 要部署的项(适用于所有部署方法) 提供了三个选项卡的部分下拉列表:

  • 仅限运行此应用程序所需的文件。 这是默认值。 Visual Studio尝试确定哪些文件对于应用程序平稳运行所必需的。 例如,则在编译期间生成的转换 内容标记的bin文件夹、文件和文件包括程序集。 若要查看文件是否已标记为 内容,选择。解决方案资源管理器的文件,然后检查在 属性 窗口的文件的 生成操作 属性。 可以更改 生成操作 值。内容 使这些文件部署,或将其更改为其他例如,,防止文件部署。 自动设置为 内容 的某些文件类型包括.master,.svc,.ashx,.asax,.skin,.browser,.config,windowsforms站点地图。 在项目必须包含文件为了使 生成操作 属性。

  • 此项目中的所有文件。 无论其 生成操作 属性值,Visual Studio部署在项目中包含的所有文件。

  • 在项目文件夹中的所有文件。 Visual Studio部署在项目文件夹和子文件夹,的所有无论文件包括在项目中或其 生成操作 属性值。

如果您熟悉MSBuild语法,可以找到有关这三个选项如何的详细信息。以下文件工作:

  • Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

  • Microsoft.Web.Publishing.AllFilesInTheProject.targets

  • Microsoft.Web.Publishing.AllFilesInProjectFolder.targets

这些文件可在安装Visual Studio的计算机的以下位置找到:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\

返回页首

我是否能包含特定文件或文件夹从我的项目文件夹之外?

是。 有关如何执行此操作的信息,请 生成包包含附加文件或排除特定文件 参见。Sayed Hashimi的博客。

返回页首

如何禁用Web.config转换?

有几个选项:

  • 在注释特定转换Web.config转换文件。

  • 对转换文件重命名为不对应一个定义的生成配置或发布配置文件的名称。 例如,可以将 Web.Debug.config 更改为 Web.Debugx.config。 (您可能必须重命名文件在Visual Studio外)

  • 删除转换文件。 如果已经自定义该文件,自定义设置将丢失。

  • 通过添加 TransformWebConfigEnabled 元素。PropertyGroup 组件并设置其值编辑器.pubxml文件或.wpp.targets文件。False。

返回页首

何时使用Web部署参数而不是Web.config转换?

Web比Visual Studio Web.config转换部署参数是复杂设置,但非常灵活。 Web部署参数是复杂的设置,因为它们可以自动执行许多其他部署任务,如更新数据库脚本和IIS设置。 Web部署参数为Web.config转换非常有用,在创建部署包时,因此,在创建包时不知道需要输入部署的Web.config文件中的值。 Web部署参数可以为参数指定值,在安装包,没有,则在创建。 这尤其有用在企业环境中,通常可供其他人员可以负责创建并安装部署包。 例如,包的开发人员可能不知道需要Web.config文件中的某些密码。 安装包的IT管理员可以输入这些值,在安装包。 有关更多信息,请 参数化与. Web.config转换 参见Vishal Joshi博客和 如何在 Web 部署包中使用 Web 部署参数

返回页首

如何部署代码的第一个数据库,而不会迁移?

在实现entity framework代码的第一个上下文选件类访问数据库时,发布 Web 向导的 设置 可显示允许您使用第一个代码迁移自动化该数据库的部署的复选框。 但是,如果使用第一个代码API,只访问数据库和代码不先使用创建数据库,您不能使用迁移部署它。 在此方案中,您希望了解允许您部署SQL Server数据库的 更新数据库 复选框您不会将第一个代码上下文。

部署代码第一个数据库,而无需使用迁移

  1. 在Visual Studio,因此,如果您打开 发布 Web 的向导,请关闭它。

  2. 在应用程序Web.config文件,请创建数据库中的其他连接字符串元素。 提供此新连接字符串元素不匹配上下文类名或完全限定类名的名称。

  3. 生成项目,然后打开 发布 Web 向导并选择要使用的配置文件。

  4. 选择**“设置”**选项卡。

    已经在选项卡上 数据库 部分的数据库现在会看到两项,一个代码的第一个上下文选件类和一个在Web.config文件的新连接字符串的。

  5. 在第一个代码上下文选件类中的项,请输入连接字符串所需应用程序在运行时使用,并清除 将第一个代码迁移 复选框。

  6. 在部署期间,新的Web.config文件连接字符串中的项,请输入应使用进行架构更改的连接字符串并选择 更新数据库

    有关如何输入数据库部署设置的更多信息,请参见 如何:使用 Visual Studio 中的一键式发布来部署 Web 应用程序项目

返回页首

如何调试部署打包或发布过程?

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

  • 安静

  • 最低

  • Normal

  • 详细

  • 诊断

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

返回页首

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

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

返回页首

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

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

返回页首

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

您可以创建两个发布配置文件,一个发布该项目和一个创建备份包。 然后,在发布项目必须切换到重新创建包并单击 发布 的发布配置文件之后。 有关如何创建一个包的发布的信息的分析,请参见 如何:在 Visual Studio 中创建 Web 部署包

返回页首

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

是。 编辑项目文件并在相应的 PropertyGroup 元素中添加 DeployOnBuild 元素。 有关如何编辑项目文件的信息,(,请 如何:编辑在项目文件的部署设置参见。)下面的示例演示针对“Release”生成配置的 PropertyGroup 元素:

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

如果将在项目文件中此更改,请确保更新的 PropertyGroup 元素在 Import 语句之前位于项目文件。 (必须在 Microsoft.Web.Publishing.targets的 Import 之前设置 DeployOnBuild 属性。)

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

这是必须执行使该包创建自动的所有,当您从命令行的解决方案。 若要使自动创建包还使用,则在生成从Visual Studio的解决方案时,将以下代码添加到项目文件在 Microsoft.CSharp.targets 或 Microsoft.VisualBasic.targets的 Import 后面:

<PropertyGroup> 
  <BuildDependsOn> 
    $(BuildDependsOn); 
    Package 
  </BuildDependsOn> 
</PropertyGroup>

返回页首

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

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

返回页首

如何保留my从重新启动多次的应用程序域在较长的部署过程中?

如果需要执行多个复制命令部署应用程序,并且在它们之间的大量时间间隔,应用程序域重新启动可能在复制命令之间。 若要阻止重新启动,添加一个 httpRuntime 元素(ASP.NET 设置架构) 元素添加到Web.config文件并将 waitChangeNotification 属性设置为要等待程序域不重新启动在复制命令之间。 例如,如果您希望指定五秒的等待时间,httpRuntime 元素可能类似于以下示例。

<configuration>
  <system.web>
        <compilation debug="false" targetFramework="4.0" />
    <httpRuntime 
      waitChangeNotification="5" />
  </system.web>
</configuration>

如果您希望确保应用程序域在第一个复制命令执行后的特定时间间隔内重新启动,请向 httpRuntime 元素添加一个 maxWaitChangeNotification 特性,并将它设置为要等待的最大秒数。 例如,包含具有两个特性的 httpRuntime 元素的 Web.config 文件可能类似于以下示例。

<configuration>
  <system.web>
    <httpRuntime 
      waitChangeNotification="5"
      maxWaitChangeNotification="10" />
  </system.web>
</configuration>

返回页首

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

若要部署 ASP.NET 4 Web 应用程序,必须在目标服务器上向 IIS 注册 ASP.NET 4。 此外,必须将要部署到 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 Registration Tool (Aspnet_regiis.exe)

返回页首

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

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

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

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

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

返回页首

远程部署的原因。大文件失败,不过,本地部署成功?

通常,当您部署到生产服务器时在firewall中部署。 如果收到关于大文件的关闭流错误,请在firewall的设置。 如果这是部署失败的原因,您可能会看到错误消息例如在源计算机上的以下示例:

Warning: Retrying the sync because a socket error (10054) occurred.

Retrying operation 'Serialization' on object MSDeploy.contentPath (sourcePath).

在目标服务器上,您可能会看到错误消息如下面的示例:

System.Net.HttpListenerException: An operation was attempted on a nonexistent network connection

返回页首

请参见

概念

用于 Visual Studio 和 ASP.NET 的 Web 部署内容映射