对于希望在 Web 应用程序之间共享的程序集(如包含自定义 ASP.NET 服务器控件的程序集),应将其部署到远程服务器上的全局程序集缓存 (GAC)。
如果部署的应用程序包含对某个自定义组件的引用,该组件在本地服务器的全局程序集缓存中注册,则不会将该组件与该应用程序一起部署到远程服务器。需要在远程服务器的全局程序集缓存中安装该组件,也可以在部署之前将该组件复制到本地 Web 应用程序的 Bin 文件夹中。
某些开发工具(如 Visual Web Developer)可以使应用程序的部署较为容易。
先决条件
若要完成本演练,您需要:
.NET Framework。
现有的 ASP.NET 网站。如果已经配置了这样一个站点,则可以将其作为本演练的起点。
可使用文件路径或 UNC 路径访问的目标。
说明:
本演练假定您未使用设计器,如 Visual Web Developer 或 Visual Studio。
准备
如果您正在部署大型网站并希望目标网站在您复制文件时脱机,可以使用以下步骤。
在部署之前使 Web 应用程序脱机
创建一个名为 App_offline.htm 的文件,并将其放在目标网站的根中。
在 App_offline.htm 文件中放入一条友好消息,让客户端知道您正在更新站点。
当 App_offline.htm 文件存在时,对网站的任何请求都将重定向到该文件。
重要说明:
请记住在文件复制完毕后删除 App_offline.htm 文件。
如果某些文件类型和文件夹发生了更改,应用程序域将重新启动。可以配置重新启动应用程序域之前应用程序等待另一次文件更改通知的秒数。
使应用程序域重新启动的次数最少
打开 Web 应用程序的 Web.config 文件。如果没有 Web.config 文件,可以使用以下代码创建该文件
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
</system.web>
</configuration>
向 Web.config 文件添加一个 httpRuntime 元素(ASP.NET 设置架构) 元素,并将 waitChangeNotification 属性设置为超过以下时间的任意秒数,该时间为更新两个文件复制更改通知之间的时间。例如,您的 httpRuntime 元素可能类似于以下代码。
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<httpRuntime waitChangeNotification="5" />
</system.web>
</configuration>
向 httpRuntime 元素添加一个 maxWaitChangeNotification 属性,并将该属性设置为从第一个文件更改通知开始到重新启动应用程序域之前等待的最大秒数。将该属性设置为一个超过完成任何文件复制过程所需时间的数值。根据此属性和 waitChangeNotification 属性的值来合并文件更改通知。例如,您的 httpRuntime 元素可能类似于以下代码。
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<httpRuntime
waitChangeNotification="5"
maxWaitChangeNotification="10"
/>
</system.web>
</configuration>
使用 XCOPY 从命令行部署 ASP.NET Web 应用程序
单击“开始”,然后单击“运行”。
在“运行”对话框的“打开”框中,键入 cmd,然后单击“确定”。
在命令提示处,键入下列命令:
xcopy /I /S<source path> <destination path>
在此命令中,<source path> 是 Web 应用程序的完整路径,而 <destination path> 是应用程序将部署到的目录的完整路径。
说明:
对于 XCOPY 工具,必须使用物理目录名。不能使用虚拟目录名。
/S 参数复制所有子目录及其包含的文件。
/I 参数指示复制一个目录。如果目标文件夹不存在,XCOPY 将创建一个目标文件夹。
下面的命令示例将 c:inetpubwwwrootdevapp 目录下的所有文件复制到 d:publicsitesliveapp 目录下。
Xcopy /I /Sc:inetpubwwwrootdevapp d:publicsitesliveapp
该命令可能会暂停以等待您回答问题,例如“是否覆盖 文件名(是/否/全部)?”,您可以键入您的答案。
可以使用 XCOPY /EXCLUDE 选项从复制操作中排除子目录、带特定文件扩展名的文件或特定的文件名。要了解更多信息和参数,可以在“开始”菜单的“帮助和支持”窗口中查看“Xcopy”,也可以在命令行键入 xcopy /?。
从命令行部署或更新 ASP.NET Web 应用程序中的单个文件
单击“开始”,然后单击“运行”。
在“运行”对话框的“打开”框中,键入 cmd,然后单击“确定”。
在命令提示处,键入下列命令:
xcopy <source path> <destination path>
在此命令中,<source path> 是要复制的源文件的完整路径,而 <destination path> 是要放置复制文件的目录的完整路径。
下面的示例命令将一个驱动器上 Bin 目录中的一个 DLL 复制到另一个驱动器上的 Bin 目录下。
Xcopy c:inetpubwwwrootdevappbinsampleAssembly.dll d:publicsitesliveappbin
下面的示例命令将一个驱动器上 Bin 目录下的所有 DLL 文件复制到另一个驱动器上的 Bin 目录下。
Xcopy c:inetpubwwwrootdevappbin*.dll d:publicsitesliveappbin
该命令可能会暂停以等待您回答问题,例如“是否覆盖 文件名(是/否/全部)?”,您可以键入您的答案