项目管理实践【五】自动编译和发布网站【Using Visual Studio with Source Control System to build and publish website autom

news/2024/5/15 22:44:42/文章来源:https://blog.csdn.net/whw8007/article/details/8822343

作者:Learning and Sharing--张涛的技术博客

转自:http://www.cnblogs.com/ttzhang/archive/2008/11/10/1330321.html


在上一篇教程项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目,今天我们讲解一下怎么使用MSBuild+WebDeployment+Robocopy自动编译过和部署ASP.NET网站。
首先安装下面的三个软件:

1.MSBuild.Community.Tasks下载:
http://msbuildtasks.tigris.org/files/documents/3383/28296/MSBuild.Community.Tasks.msi

源代码:
http://msbuildtasks.tigris.org/files/documents/3383/36642/MSBuild.Community.Tasks.v1.2.0.306.zip

 2.WebDeployment下载:

For VS2005
http://download.microsoft.com/download/9/4/9/9496adc4-574e-4043-bb70-bc841e27f13c/WebDeploymentSetup.msi

For VS2008 [RTW]
http://download.microsoft.com/download/9/4/9/9496adc4-574e-4043-bb70-bc841e27f13c/WebDeploymentSetup.msi

 3.Utility Spotlight Robocopy GUI 下载:【下载后,解压后安装,Vista不用安装】
http://download.microsoft.com/download/f/d/0/fd05def7-68a1-4f71-8546-25c359cc0842/UtilitySpotlight2006_11.exe

安装完成后,就开始今天的教程了。

我们以前面教程中创建的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就会编译整个解决方案【当然也会编译部署项目】,如果编译成功,就会自动将最新的程序部署到我们网站上。这样就可以使网站和我们的开发实时保持同步,这只不是唯一的实现方法,其他还有很多可以实现这个功能的方法,大家可以在这里讨论和交流。

补充:
Microsoft Build Engine (MSBuild) Microsoft Visual Studio 的新的生成平台。MSBuild 在如何处理和生成软件方面是完全透明的,使开发人员能够在未安装 Visual Studio 的生成实验室环境中组织和生成产品。通过这几篇教程,我们可以看出,MSBuild的强大功能,如果希望理解更多关于MSBuild的信息,请查看这里http://msdn.microsoft.com/zh-cn/library/ms171451.aspx

如果你对我讲解的这些内容不熟悉,建议你从头开始看这个系列的教程:项目管理实践系列教程。

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_844018.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二级域名_高权重网站二级域名的seo实战运用

我们大家都知道&#xff0c;搜索引擎的流量是互联网上最为精准的流量之一&#xff0c;而且是用户主动搜索的流量&#xff0c;所以搜索引擎的流量要比很多其他平台获取到的流量转化率要高很多&#xff0c;因此&#xff0c;在互联网上搜索引擎的流量是在整个网络营销过程中的很重…

linux监控网站命令,Linux中的网络监控命令

监控整体的带宽使用nload命令官网下载地址&#xff1a;http://www.roland-riegel.de/nload/index.html通过YUM也可以安装yun -y install nload参数说明-t设置刷新时间间隔&#xff0c;单位为毫秒&#xff0c;默认500-i设置入站的流量图显示比例&#xff0c;默认10240-o设置出站…

USB 描述符详细解析,来自老外网站,比协议描述清晰

作者&#xff1a;header 转自&#xff1a;http://blog.csdn.net/zongguo/article/details/9322609 来自&#xff1a;http://wiki.osdev.org/Universal_Serial_Bus Universal Serial Bus The Universal Serial Bus was first introduced in 1994 with the intention of replac…

LOGO SEO 强化

前言 在某些网页中&#xff0c;为了能让浏览器更好的搜索到该网页&#xff0c;就会使用logo SEO来提权&#xff01; 代码部分 <div class"logo"><h1><a href"index.html" title"小米商城">小米商城</a></h1>&l…

如何消除网站安全的七大风险

以工作中某项目的安全改善过程为例&#xff0c;分享了常用网站安全性的典型问题和解决对策&#xff0c;希望对网站开发者有借鉴意义。 有过网站开发经验的朋友都知道网站安全是构建网站时必须要考虑的一个因素&#xff0c;网站安全的重点在于服务器的安全配置管理以及程序脚本的…

推荐一些国内外文献检索与免费下载的网站

学会尊重他人的劳动成果-转载来源https://blog.csdn.net/weixin_43795921/article/details/100169662?utm_sourceapp 点击即可打开链接&#xff1a; 1.SCI-Hub 2.CiteSeerX 3.arXiv.org 4.FINDARTICLES 5.scinapse&#xff08;用于检索比较好用&#xff0c;下载不了的在SC…

从运维角度看中大型网站架构的演变之路

一个成熟的网站架构并不是一开始设计就具备高可用、高伸缩、高性能等特性的&#xff0c;它是随着用户量和业务线不断增加&#xff0c;基础架构才逐渐健壮的。在发展初期&#xff0c;一般都是从0到1&#xff0c;不会一上来就整一些大而全的架构&#xff0c;也很少人这么任性。 …

查找会议论文的网站

http://conf.cnki.net/advanceSearch.aspx http://www.allconfs.org/list.asp

python2、python3同时存在,pip安装包后,显示No module named的问题(附加国内镜像网站)

python2、python3同时存在&#xff0c;pip安装包后&#xff0c;显示No module的问题&#xff08;附加国内镜像网站&#xff09; 在电脑中同时安装python2、python3的情况下&#xff0c;明明已经pip相对应的包后&#xff0c;但是使用import相应包时python2可以正常导入&#xf…

免费GIS数据下载网站推荐

&#xfeff;&#xfeff;数据是 GIS 的核心&#xff0c;然而你是不是还在为找不到数据而苦恼呢&#xff1f;本期我们为你挑选了国外十个免费的数据下载网站&#xff0c;赶快去看看吧&#xff01; 1、Natural Earth Data 网址&#xff1a;http://www.naturalearthdata.com/ N…

大型网站系统与JAVA中间件实践 学习总结 一

大型网站系统与JAVA中间件实践 学习总计 一前言一、用 JAVA技术和单机来构建的网站二、将单机系统设定为交易网站三、单机负载警告&#xff0c;数据库与应用分离四、应用服务器负载告警&#xff0c;如何让应用服务器走向集群访问选择问题---引入负载均衡解决session问题Session…

eyoucms网站基本信息设置

后台 — 网站首页 — 页面设置&#xff0c;即可设置。 网站基本信息是贯穿显示在整个网站上的&#xff0c;且其他SEO相关设置也会引用到&#xff0c;主要包含网站名称、关键词和网站描述等设置。 关闭网站&#xff1a;默认选择“否”&#xff0c;如果维护&#xff0c;备案或其…

eyoucms网站基本信息设置

后台 — 网站首页 — 页面设置&#xff0c;即可设置。 网站基本信息是贯穿显示在整个网站上的&#xff0c;且其他SEO相关设置也会引用到&#xff0c;主要包含网站名称、关键词和网站描述等设置。 关闭网站&#xff1a;默认选择“否”&#xff0c;如果维护&#xff0c;备案或其…

eyoucms 到底什么是网站根目录?

对于站长和互联网技术人员而言&#xff0c;网站根目录是一个很常见的概念&#xff0c;弄不明白到底哪一个目录才是根目录的新手也并不少见&#xff0c;今天益吾库就跟大家分享一下到底什么是网站根目录的相关知识。 什么是根目录 顾名思义&#xff0c;根就像树根一样&#xf…

setoolkit克隆网站并抓取账号密码

文章目录setoolkit简介setoolkit克隆站点遇到的问题setoolkit简介 社会工程师工具包&#xff08;The Social-Engineer Toolkit&#xff09;是一个为社会工程设计的开源渗透测试框架。SET有许多自定义攻击向量&#xff0c;允许您快速地进行可信的攻击。SET是TrustedSec有限责任…

eyoucms 网站导航怎么设计?

通常用户第一眼进入网站看到的是首页的图片&#xff0c;其次就是网站的主导航&#xff0c;因此主导航对网站来说至关重要&#xff0c;不仅能够起到很好的指引作用&#xff0c;一个有魅力的导航还能留住用户浏览更多的信息&#xff0c;而且带给用户良好的体验。&#xff0c;那么…

网站的组成部分有什么?

网站的组成分为网站域名、网站空间和网站程序&#xff0c;接下来我们分别了解一下这三个部分。 网站域名相关知识&#xff1a; 1、eyoucms.com为顶级域名&#xff0c;bbs.eyoucms.com为二级域名&#xff0c;拥有顶级域名所有权及管理权便可以自行分配二级域名&#xff0c;如ww…

eyoucms 如何判断网站的SEO优化情况

网站程序自身的SEO优化质量可以通过以下几个方面加以判断&#xff1a; 1、网页标题 &#xff08;title部分&#xff09;是否体现了全站的关键词&#xff0c;每个页面的关键词是否不同&#xff0c;一般栏目应该以栏目名称为主要关键词&#xff0c;内容页面以内容标题为关键词…

eyoucms 怎么使用网站地图?

网站无论大小&#xff0c;单独的网站地图页面都是必需的&#xff0c;通过网站地图&#xff0c;不仅用户可以对网站的所有内容一幕了然&#xff0c;搜索引擎也可以跟踪链接爬行到网站的主要部分。一般来说&#xff0c;网站地图有两种形式&#xff1a; 一种是HTML&#xff0c;…