Web Deployment Project (WDP)是一个在Visual Studio外挂上去的专案类型,主要目的是提供你将现有ASP.NET Website Project (网站专案)或ASP.NET Web Application Project (网站应用程式专案)另一种部署网站的方式,让你开发的网站在建置、封装、部署时拥有更多的选项,也让网站部署更加方便与自动化。
对于有些人来说也许不了解ASP.NET网站专案ASP.NET网站应用程式专案的差别,建议可参考黑大Web Site Project vs Web Application Project文章。
若我们有一个ASP.NET Website专案,并且希望将网站预先编译后部署到正式主机的话,若不靠WDP我们会用VS2008内建的Publish Web Site (发布网站)功能(如下左图),但缺点就是会输出一大堆组件,事实上对部署网站来说是一大负担,你总不希望每次部署网站都要砍掉所有资料再重新上传吧。
这时你就可以改用Web Deployment Projects,但与Publish Web Site的操作方式不太一样,Publish Web Site是直接将网站发布到一个目录下,但Web Deployment Projects必须先新增一个独立的WDP专案到方案中(加入方式如上右图),然后先预先设定组件名称 (Assembly Name)与网站建置时的输出目录
接着就可以直接编译网站或开启WDP专案的属性设定页面进行设定。
对于属性设定页面每个栏位的说明,大多都很容易看懂,至于详细的说明各位可到Using Web Deployment Projects with Visual Studio 2005查询,这页的说明一样适用于VS2008的开发环境。
但对于一些Property Pages的选项,有些挺实用的设定我想特别说明如下:
Configuration Properties –> Output Assemblies
在Output Assemblies分类中有四个选项,预设是第一个选项,他可以将整个网站编译成单一组件,其中包括所有页面、使用者控制项、App_Code、App_WebReferences、...等目录编译的结果。 但我比较中意第三个设定,他可以将所有跟使用者介面(UI)有关的页面程式码编译到一个组件中,其他像是App_Code、App_WebReferences、...等目录都会个别建立不同的组件,这也意味着未来若有页面程式更新时,你只需部署相关的组件即可,减少部署时网路传输的时间。
Configuration Properties –> Deployment
在Deployment分类中的设定是我最爱的部分了,他可以让你的自订许多「部署」时的状况,我先说明各参数的用途:
Enable Web.config file section replacement
        你可以在开发时用自己的web.config设定,但是在部署的时候动态替换成另一个web.config的内容,例如你可以替换appSettings或connectionStrings的内容。
        这里可以设定WDP在进行编译/部署时(按下Build等同于部署动作),在网站专案输出根目录下的Web.config是否有哪个区段(section)要被取代,如上图设定,你的ASP .NET专案中也必须要有appSettings_Staging.config与SQL2005_Staging.config档案才行。
         appSettings_Staging.config的内容范例如下,一个档案只能包括一个区段的资料:        
<?xml version="1.0"?>
<appSettings>
<add key="test" value="TEST123"/>
<add key="test1" value="TEST123"/>
<add key="test2" value="TEST123"/>
<add key="test3" value="TEST123"/>
</appSettings>
Enforce matching section replacements
        由于你可以在开发环境自行定义appSettings的参数数量,有时后你自己加了一个参数后很有可能会忘了将「要部署的web.config」也加上这个参数,勾选这个选项就可以避免这种人为疏失的发生。
Use external configuration source file
        若这个选项不勾选,原本的web.config内容就会依据Enable Web.config file section replacement的设定直接替换掉内容。
        若勾选了此选项,原本web.config内的区段就会被改成用外部载入的方式宣告,例如:        
< appSettings configSource ="appSettings_Staging.config" />
Remove the App_Data folder from output location
        通常App_Data目录用来储存一些网站相关的资料,例如SQLExpress资料库或其他档案。 而这些资料通常会在不同的执行环境有不同的资料,例如在测试机会有测试用的资料,在正式机会有正式版的资料,通常在部署的时候不会希望盖掉这些资料。
        若勾选此选项,在进行编译/部署时就会直接将App_Data目录整个移除,让你复制这些档案过去时不用再手动删除一遍。
Configuration
        可以让你切换组态的模式,预设有Debug与Release,你还可以额外自订,例如:Staging (测试环境)。
        意思也就是说,以上的设定可以设定好几组,你只要切换不同的模式(如下图),就可以输出不同执行环境的部署档案,方便你将档案复制到目的主机。
                
        你也可以透过Configuration Manager定义不同的Configuration模式是否要编译Web Deployment Project专案,例如说你在Debug mode应该就不需要建置WDP专案(如下图示),你可以设定Release或Staging时才需要编译此专案,并自动产生部署档案:
        
除了透过Visual Studio介面的设定外,事实上你还可以自行修改Web Deployment Project的专案档( *.wdproj ),此专案档其实就是透过MSBuild编译执行的,因此这个设定档可以让你自订所有要在编译时需进行的任何自订动作。
 
举几个例子来说:
  • 在Staging模式时,你可以修改*.wdproj自订动作将建置完的档案直接复制到Staging主机
  • 在建置之前(BeforeBuild)删除一些部署时不必要的档案或目录(例如.svn或_svn目录)
  • 在建置完成(AfterBuild)后将所有*.js档案压缩,或将jQuery改由Google AJAX Libraries API载入
MSBuild也是另一套超级强大的工具,对于每日建置(Daily Build)或需要开发流程自动化的人,一定要熟悉这套工具如何操作,以下是一些相关连结:
若要下载Web Deployment Projects可以参考以下网址:
说明:本文由繁体中文翻译而来,仅作个人学习之用,转载请保留原文地址。
原文地址:http://blog.miniasp.com/post/2009/01/Visual-Studio-2008-Web-Deployment-Project.aspx