在上一篇教程项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目,今天我们讲解一下怎么使用MSBuild+WebDeployment+Robocopy自动编译过和部署ASP.NET网站。 1.MSBuild.Community.Tasks下载: 源代码: 2.WebDeployment下载: For VS2008 [RTW]
3.Utility Spotlight Robocopy GUI 下载:【下载后,解压后安装,Vista不用安装】 安装完成后,就开始今天的教程了。 我们以前面教程中创建的StartKit解决方案为例子,结构如下: 在上图所示的Web项目StartKit上右键点击,然后点击Add Web Deployment Project…,如下图:
弹出下面的窗体,分别输入部署项目名称和项目要放置的位置,如下图:
点击OK按钮后,解决方案的结构如下图: 今天会讲到下面二个方法,上面的步骤一样,从这里开始,下面的步骤有区别。 方法一:使用WebDeployment创建虚拟目录 优点:使用简单 缺点:功能不够强大,只能部署到虚拟目录 右键点击部署项目,点击菜单中的Property Pages,如下图:
在下面的窗体中,点击左侧的Complication,在右侧的Output Folder下的文本框中输入编译后网站文件的输出路径: 然后,点击左侧的Deploment,在右侧选中Create an IIS virtual directory for the output folder前面的CheckBox,在下面的Virtual directory name下的文本框中输入虚拟目录的名字,Replace the existing virtual directory前面的CheckBox根据实际情况确定是否选中,如下图: 点击确定按钮,编译部署项目StartKit.csproj_deploy,编译成功后,我们打开IIS,在默认网站下可以看到虚拟目录StartKit。OK,成功了! 方法二:使用WebDeployment+MSBuild+Robocopy 优点:功能强大 缺点:配置有点麻烦 这个方法不用配置Property Pages,直接右键点击StartKit.csproj_deploy项目文件,在菜单中点击Open Project File打开部署项目文件: 修改部署项目文件为下面的内容:
1 <!--Microsoft Visual Studio 2008 Web Deployment Project http://go.microsoft.com/fwlink/?LinkID=104956-->
2 3 <Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 4 <PropertyGroup> 5 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 6 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 7 <ProductVersion>9.0.21022</ProductVersion> 8 <SchemaVersion>2.0</SchemaVersion> 9 <ProjectGuid>{00000000-0000-0000-0000-000000000000}</ProjectGuid> 10 <SourceWebPhysicalPath>..\StartKit</SourceWebPhysicalPath> 11 <SourceWebProject>{96E1A089-3FBB-4909-94F6-172665994449}|StartKit\StartKit.csproj</SourceWebProject> 12 <SourceWebVirtualPath>/StartKit.csproj</SourceWebVirtualPath> 13 <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> 14 <ProjectName>StartKit</ProjectName> 15 <Major>1</Major> 16 <Minor>0</Minor> 17 <Revision>0</Revision> 18 <VSSName>ttzhang</VSSName> 19 <VSSPassword>123456</VSSPassword> 20 <FtpName>anonymous</FtpName> 21 <FtpPassword>anonymous</FtpPassword> 22 <SmtpServerName>smtp.163.com</SmtpServerName> 23 <FromAddress>ttzhang@163.com</FromAddress> 24 <ToAddress>zttc@163.com</ToAddress> 25 <MailPassword>testmail</MailPassword> 26 </PropertyGroup> 27 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 28 <DebugSymbols>true</DebugSymbols> 29 <OutputPath>.\Debug</OutputPath> 30 <EnableUpdateable>true</EnableUpdateable> 31 <UseMerge>true</UseMerge> 32 <SingleAssemblyName>StartKit_deploy</SingleAssemblyName> 33 </PropertyGroup> 34 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 35 <DebugSymbols>false</DebugSymbols> 36 <OutputPath>.\Release</OutputPath> 37 <EnableUpdateable>true</EnableUpdateable> 38 <UseMerge>true</UseMerge> 39 <SingleAssemblyName>StartKit_deploy</SingleAssemblyName> 40 </PropertyGroup> 41 <ItemGroup> 42 </ItemGroup> 43 <!--下面的ItemGroup节点可选,这个和项目文件StartKit.csproj中的内容相同--> 44 <ItemGroup> 45 <ProjectReference Include="..\BLL\BLL.csproj"> 46 <Project>{73A293A1-CDCC-4919-9B05-BA2531ADDB56}</Project> 47 <Name>BLL</Name> 48 </ProjectReference> 49 <ProjectReference Include="..\DAL\DAL.csproj"> 50 <Project>{AFF6077D-DD2D-48A0-BFAD-051BD67A6953}</Project> 51 <Name>DAL</Name> 52 </ProjectReference> 53 <ProjectReference Include="..\IBLL\IBLL.csproj"> 54 <Project>{620770BB-7A27-4585-9B97-44EEE349121D}</Project> 55 <Name>IBLL</Name> 56 </ProjectReference> 57 <ProjectReference Include="..\Model\Model.csproj"> 58 <Project>{EA43EC2E-5890-4431-BD3E-5F6C090DEA3A}</Project> 59 <Name>Model</Name> 60 </ProjectReference> 61 </ItemGroup> 62 <!--引入MSBuildCommunityTasks--> 63 <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 64 <!--邮件发送--> 65 <!--<Target Name="EmailTest" > 66 <Message Text = " Mail sending"></Message> 67 <Mail SmtpServer="$(SmtpServerName)" 68 Subject="Test" 69 Password="$(MailPassword)" 70 From ="$(FromAddress)" 71 To ="$(ToAddress)" 72 Body="This is a test of the mail task." /> 73 </Target>--> 74 <!--备份文件到FTP--> 75 <!--<Target Name="Backup" DependsOnTargets="Zip" > 76 <FtpUpload UserName="$(FtpName)" 77 Password="$(FtpPassword)" 78 LocalFile="$(ZipFileName)" 79 RemoteUri="ftp://192.168.1.2/SourceBackup/$(ZipFileName)" /> 80 <OnError ExecuteTargets="HandleErrorBackup" /> 81 </Target>--> 82 <!--备份文件到FTP失败则发送邮件--> 83 <!--<Target Name="HandleErrorBackup"> 84 <Message Text="Backup failed" /> 85 <Mail SmtpServer="$(SmtpServerName)" 86 To="$(ToAddress)" 87 From="$(FromAddress)" 88 Subject="$(ProjectName) Build failed" 89 Body="Backup Failure: Could not finish Backup ." /> 90 </Target>--> 91 <!--编译项目--> 92 <Target Name="BuildProjectReferences"> 93 <MSBuild Projects="@(ProjectReference)" Targets="Build" /> 94 </Target> 95 <!--生成压缩文件--> 96 <Target Name="Zip"> 97 <!--时间格式--> 98 <Time Format="yyyyMMddHHmmss"> 99 <Output TaskParameter="FormattedTime" PropertyName="buildDate"/> 100 </Time> 101 <Zip Files="@(ZipFiles)" ZipFileName="StartKit V$(Major)-$(Minor)-$(Revision)-$(buildDate).zip"/> 102 </Target> 103 <!--复制文件--> 104 <Target Name="Copy"> 105 <!--停止IIS服务--> 106 <ServiceController ServiceName="w3svc" Action="Stop" /> 107 <!--使用Robocopy复制编译后的文件到指定位置 /XD是要忽略的文件夹,/XF要忽略的文件类型--> 108 <Exec Command="Robocopy Debug c:\inetpub\StartKit /MIR /XD Fckeditor attachments .svn obj doc Test /XF *.zip *.wdproj *.user *.cs *.csproj" IgnoreExitCode="true" /> 109 <!--启动IIS服务--> 110 <ServiceController ServiceName="w3svc" Action="Start" /> 111 </Target> 112 <!--引入WebDeployment--> 113 <Import Project="$(MSBuildExtensionsPath)\Microsoft\WebDeployment\v9.0\Microsoft.WebDeployment.targets" /> 114 <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 115 Other similar extension points exist, see Microsoft.WebDeployment.targets.--> 116 <Target Name="BeforeBuild"></Target> 117 <Target Name="BeforeMerge"></Target> 118 <Target Name="AfterMerge"></Target> 119 <Target Name="AfterBuild"> 120 <!--编译成功后,执行下面的Targets--> 121 <!—不想生成ZIP文件,可以注释下面ZIP的target--> 122 <CallTarget Targets="Zip"/> 123 <CallTarget Targets="Copy" /> 124 <!--<CallTarget Targets="EmailTest"/> 125 <CallTarget Targets="Backup" />--> 126 </Target> 127 </Project>
编译部署项目成功后,打开C:\inetpub\StartKit文件夹,看看是否成功复制过去了呢?好的,我去看看,哈哈,文件果然都在,OK,成功啦! 这时候,在IIS上创建一个虚拟目录或者网站,指向我们部署项目中指定的目录。上一篇我们已经将该项目添加到了CCNET中,所以以后我们每次提交代码后,MSBuild就会编译整个解决方案【当然也会编译部署项目】,如果编译成功,就会自动将最新的程序部署到我们网站上。这样就可以使网站和我们的开发实时保持同步,这只不是唯一的实现方法,其他还有很多可以实现这个功能的方法,大家可以在这里讨论和交流。 补充: 如果你对我讲解的这些内容不熟悉,建议你从头开始看这个系列的教程:项目管理实践系列教程。
|
|