项目管理实践【五】自动编译和发布网站

news/2024/4/28 3:50:39/文章来源:https://blog.csdn.net/lionzl/article/details/4007217
项目管理实践【五】自动编译和发布网站 
时间: 2009.02.08 15:47:00 
标签:  

在上一篇教程项目管理实 践【三】每日构建【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下载:
http://download.microsoft.com/download/c/c/b/ccb4877f-55f7-4478-8f16-e41886607a0e/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打开部署项目文件:

修改部署项目文件为下面的内容:

<!--Microsoft Visual Studio 2008 Web Deployment Projecthttp://go.microsoft.com/fwlink/?LinkID=104956-->

<ProjectToolsVersion="3.5"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ConfigurationCondition="'$(Configuration)' == ''">Debug</Configuration>
<PlatformCondition="'$(Platform)' == ''">AnyCPU</Platform>
<ProductVersion>9.0.21022</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{00000000-0000-0000-0000-000000000000}</ProjectGuid>
<SourceWebPhysicalPath>../StartKit</SourceWebPhysicalPath>
<SourceWebProject>{96E1A089-3FBB-4909-94F6-172665994449}|StartKit/StartKit.csproj</SourceWebProject>
<SourceWebVirtualPath>/StartKit.csproj</SourceWebVirtualPath>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<ProjectName>StartKit</ProjectName>
<Major>1</Major>
<Minor>0</Minor>
<Revision>0</Revision>
<VSSName>ttzhang</VSSName>
<VSSPassword>123456</VSSPassword>
<FtpName>anonymous</FtpName>
<FtpPassword>anonymous</FtpPassword>
<SmtpServerName>smtp.163.com</SmtpServerName>
<FromAddress>ttzhang@163.com</FromAddress>
<ToAddress>zttc@163.com</ToAddress>
<MailPassword>testmail</MailPassword>
</PropertyGroup>
<PropertyGroupCondition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>./Debug</OutputPath>
<EnableUpdateable>true</EnableUpdateable>
<UseMerge>true</UseMerge>
<SingleAssemblyName>StartKit_deploy</SingleAssemblyName>
</PropertyGroup>
<PropertyGroupCondition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<DebugSymbols>false</DebugSymbols>
<OutputPath>./Release</OutputPath>
<EnableUpdateable>true</EnableUpdateable>
<UseMerge>true</UseMerge>
<SingleAssemblyName>StartKit_deploy</SingleAssemblyName>
</PropertyGroup>
<ItemGroup>
</ItemGroup>
<!--下面的ItemGroup节点可选,这个和项目文件StartKit.csproj中的内容相同-->
<ItemGroup>
<ProjectReferenceInclude="../BLL/BLL.csproj">
<Project>{73A293A1-CDCC-4919-9B05-BA2531ADDB56}</Project>
<Name>BLL</Name>
</ProjectReference>
<ProjectReferenceInclude="../DAL/DAL.csproj">
<Project>{AFF6077D-DD2D-48A0-BFAD-051BD67A6953}</Project>
<Name>DAL</Name>
</ProjectReference>
<ProjectReferenceInclude="../IBLL/IBLL.csproj">
<Project>{620770BB-7A27-4585-9B97-44EEE349121D}</Project>
<Name>IBLL</Name>
</ProjectReference>
<ProjectReferenceInclude="../Model/Model.csproj">
<Project>{EA43EC2E-5890-4431-BD3E-5F6C090DEA3A}</Project>
<Name>Model</Name>
</ProjectReference>
</ItemGroup>
<!--引入MSBuildCommunityTasks-->
<ImportProject="$(MSBuildExtensionsPath)/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets"/>
<!--邮件发送-->
<!--<Target Name="EmailTest" >
<Message Text = " Mail sending..."></Message>
<Mail SmtpServer="$(SmtpServerName)"
Subject="Test"
Password="$(MailPassword)"
From ="$(FromAddress)"
To ="$(ToAddress)"
Body="This is a test of the mail task." />
</Target>-->
<!--备份文件到FTP-->
<!--<Target Name="Backup" DependsOnTargets="Zip" >
<FtpUpload UserName="$(FtpName)"
Password="$(FtpPassword)"
LocalFile="$(ZipFileName)"
RemoteUri="ftp://192.168.1.2/SourceBackup/$(ZipFileName)" />
<OnError ExecuteTargets="HandleErrorBackup" />
</Target>-->
<!--备份文件到FTP失败则发送邮件-->
<!--<Target Name="HandleErrorBackup">
<Message Text="Backup failed..............." />
<Mail SmtpServer="$(SmtpServerName)"
To="$(ToAddress)"
From="$(FromAddress)"
Subject="$(ProjectName) Build failed"
Body="Backup Failure: Could not finish Backup ." />
</Target>-->
<!--编译项目-->
<TargetName="BuildProjectReferences">
<MSBuildProjects="@(ProjectReference)"Targets="Build"/>
</Target>
<!--生成压缩文件-->
<TargetName="Zip">
<!--时间格式-->
<TimeFormat="yyyyMMddHHmmss">
<OutputTaskParameter="FormattedTime"PropertyName="buildDate"/>
</Time>
<ZipFiles="@(ZipFiles)"ZipFileName="StartKit V$(Major)-$(Minor)-$(Revision)-$(buildDate).zip"/>
</Target>
<!--复制文件-->
<TargetName="Copy">
<!--停止IIS服务-->
<ServiceControllerServiceName="w3svc"Action="Stop"/>
<!--使用Robocopy复制编译后的文件到指定位置/XD是要忽略的文件夹,/XF要忽略的文件类型-->
<ExecCommand="Robocopy Debug c:/inetpub/StartKit /MIR /XD Fckeditor attachments .svn obj doc Test /XF *.zip *.wdproj *.user *.cs *.csproj"IgnoreExitCode="true"/>
<!--启动IIS服务-->
<ServiceControllerServiceName="w3svc"Action="Start"/>
</Target>
<!--引入WebDeployment-->
<ImportProject="$(MSBuildExtensionsPath)/Microsoft/WebDeployment/v9.0/Microsoft.WebDeployment.targets"/>
<!--To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.WebDeployment.targets.-->
<TargetName="BeforeBuild"></Target>
<TargetName="BeforeMerge"></Target>
<TargetName="AfterMerge"></Target>
<TargetName="AfterBuild">
<!--编译成功后,执行下面的Targets-->
<!—不想生成ZIP文件,可以注释下面ZIPtarget-->
<CallTargetTargets="Zip"/>
<CallTargetTargets="Copy"/>
<!--<CallTarget Targets="EmailTest"/>
<CallTarget Targets="Backup" />-->
</Target>
</Project>

编译部署项目成功后,打开C/inetpub/StartKit文件夹,看看是否成功复制过去了呢?好的,我去看看,哈哈,文件果然都在,OK,成功啦!

这时候,在IIS上创建一个虚拟目录或者网站,指向我们部署项目中指定的目录。上一篇我们已经将该项目添加到了CCNET中,所以以后我们每次提交代码后,MSBuild就会编译整个解决方案【当然也会编译部署项目】,如果编译成功,就会自动将最新的程序部署到我们网站上。这样就可以使网站和我们的开发实时保持同步,这只不是唯一的实现方法,其他还有很多可以实现这个功能的方法,大家可以在这里讨论和交流。

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

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

相关文章

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

本文指出&#xff1a;如果调低安全级别&#xff0c;ActiveX控件仍然无法使用&#xff0c;则需要将网站加入到信任站点&#xff0c;方可使用。 VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语&#xff1a;最近在弄ocx控件发布到asp.net网站上使用&#xff0…

【转】大型网站架构系列

【转】大型网站架构系列 由 农夫一号 发表于 十一月 9th, 2011 转载自www.crazycoder.cn 疯狂代码 大型网站架构系列之一,前言,不得不考虑的问题 前言&#xff1a;这两天机器坏了&#xff0c;正在送修中&#xff0c;写个系列的大型网站架构的文章&#xff0c;希望对有志…

使用squid代理后某些网站无法访问的解决办法

使用squid代理后某些网站无法访问的解决办法 2010-09-07 11:21:24 标签&#xff1a;squid代理 某些网站无法访问的解决办法 休闲 职场在测试Squid代理服务器&#xff0c;发现有些网站无法访问&#xff0c;但是绝大部分网站都是可以访问的。&#xff08;当前环境&#xff1a;sq…

毕业设计之 --- 基于java web的旅游网站设计

文章目录0 前言1 课题背景2 实现功能2.1 系统整体设计2.2 业务流程3 运行效果4 部分实现代码最后0 前言 今天向大家展示学长帮助同学完成的一个毕业设计&#xff1a;基于java web的旅游网站设计与实现。需要的同学点击下方获取源码及论文。 毕设帮助&#xff0c;开题指导&…

php 中%3cspan%3e,vue实战(4)——网站统计之——友盟百度统计

一、友盟统计首先进入到网站统计(U-Web),进入立即使用添加站点已添加站点列表进入到列表中设置中站点设置统计代码添加到相应页面&#xff0c;即可在统计报表中看到相应数据在单页面应用vue项目中只能在index.html或App.vue中添加统计代码const script document.createElement…

从上百幅架构图中学大型网站建设经验(上)

从上百幅架构图中学大型网站建设经验&#xff08;上&#xff09; 引言 近段时间以来&#xff0c;通过接触有关海量数据处理和搜索引擎的诸多技术&#xff0c;常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外&#xff0c;更为架构图背后所隐藏的设…

信息收集之网站指纹(CMS)识别、Waf识别、CDN探测(w8fuckcdn全网扫描获取ip)

CMS识别 CMSeek下载地址 Webfinger下载地址 CMS指纹识别-CMSeek CMSeek安装使用&#xff1a; 安装&#xff1a;git clone https://github.com/Tuhinshubhra/CMSeeKcms扫描命令&#xff1a;python3 cmseek.py -u 目标 #输出结果保存在/root/cms/CMSeeK/Result/www.4tricks.c…

网线制作ppt_这个能做PPT的逆天网站可能会让我失业,但我还是想介绍给你!

嗨&#xff0c;各位木友们好呀&#xff0c;我是小木。身为一个资浅无证的PPT设计师&#xff0c;我已经习惯了每天被人问一些奇形怪状的沙雕问题&#xff1a;不能用PPT的情况下怎么做PPT&#xff1f;没学过设计&#xff0c;怎么在10分钟内做出高大上的海报&#xff1f;去哪下载超…

有keras环境吗_CV学习笔记(十六):Windows环境复现ChineseOCR

项目地址&#xff1a;https://github.com/xiaofengShi/CHINESE-OCR为了方便下载&#xff1a;https://gitee.com/yunshizhijian/CHINESE-OCR因为项目中推荐使用的环境为MAC和Linux&#xff0c;因此迁移到Windows上仍需要一些改动&#xff0c;但是在网上的资料很少&#xff0c;并…

php网站留言,php实现网站留言板功能,php实现留言板_PHP教程

php实现网站留言板功能&#xff0c;php实现留言板我要实现的就是下图的这种样式&#xff0c;可参考下面这两个网站的留言板&#xff0c;他们的实现原理都是一样的畅言留言板样式&#xff1a;网易跟帖样式&#xff1a;原理需要在评论表添加两个主要字段 id 和 pid &#xff0c;其…

seo原创工具_seo优化外包

seo优化外包&#xff0c;合肥辰俊尽职尽责&#xff0c;合肥辰俊信息科技有限公司(简称辰俊网络)是一家专注于全网整合营销领域的互联网公司&#xff0c;致力于为安徽中小型企业提供全方位的公司整体品牌策划、营销型网站建设、G3云推广全网整合营销、微信营销推广、微信平台代运…

wordpress插件翻译不生效_外贸网站多语言插件 Polylang

WordPress外贸网站多语种插件 Polylang作为网站翻译市场的两大巅峰&#xff0c; Polylang和WPML凭借着各自的强大翻译功能和高度自定义化的操作&#xff0c;成功的获得了广大外贸建站人员的欢迎。在上一篇文章中 &#xff0c;Jack老师着重讲解了WPML的相关实操步骤&#xff0c;…

众筹系统源码 java_基于JavaWeb的创意众筹网站系统的设计与实现 毕业论文+任务书+开题报告+外文翻译+设计源码+mysql文件...

摘 要现代众筹指通过互联网方式发布筹款项目并募集资金。相对于传统的融资方式&#xff0c;众筹更为开放&#xff0c;能否获得资金也不再是由项目的商业价值作为唯一标准。只要是网友喜欢的项目&#xff0c;都可以通过众筹方式获得项目启动的第一笔资金&#xff0c;为更多小本…

python爬取两个网站_爬取90%的网页,只需学会这13行爬虫通用代码框架——Python版!...

还有一种方法apparent_encoding&#xff0c;可以通过分析网页内容来得到编码&#xff0c;有时候网站没有头部标识时&#xff0c;为了能正常显示&#xff0c;一般常用 apparent_encoding 替代 encoding。 五、状态码异常raise_for_status的作用就是返回一个异常错误requests.HTT…

安装错误 服务尚未启动_【云服务器Centos7.x建站】MySQL 5.7安装、使用、错误总结...

MySQL环境搭建进入本机源文件目录 cd /usr/local/src wget下载yum源的rpm包 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 安装rpm包 rpm -ivh mysql57-community-release-el7-11.noarch.rpm 使用yum安装mysql-server yum install -y mysql-se…

ios图标素材_设计必备丨强推50个免费的图标素材网站

不会画图标&#xff0c;如果知道这50个图标素材网站&#xff0c;制件图标信手拈来&#xff01;对于UI设计师来说&#xff0c;都会遇到图标设计的需求。如果有高质量的图标素材资源做后盾&#xff0c;会大大提供自己的工作效率。今天&#xff0c;给大家整理了50个设计师必看的免…

站点地图用xml好还是用html好,网站有必要做网站地图(sitemap)吗?

原标题&#xff1a;网站有必要做网站地图(sitemap)吗&#xff1f;网站地图有引导搜索引擎蜘蛛爬网站和增加收录的功能&#xff0c;是一种对收索引擎友好的设置&#xff0c;那么&#xff0c;是不是每个网站都要做一个网站地图呢&#xff1f;其实&#xff0c;根据实际情况的不同&…

服务器网站迁移注意事项,网站更换主机服务器的安全迁移注意事项

很多运营网站的过程中有更换虚拟空间的需求&#xff0c;那么更换虚拟主机空间应该注意什么呢?不管是使用什么样的网站空间&#xff0c;都可能会遇到更换新主机的情况&#xff0c;换空间相对来说比较麻烦&#xff0c;有很多问题需要我们注意&#xff0c;其中网站的安全是一定要…

python脚本根据cookies自动登录网站_python接口自动化4-绕过验证码登录(cookie)

前言 有些登录的接口会有验证码&#xff1a;短信验证码&#xff0c;图形验证码等&#xff0c;这种登录的话验证码参数可以从后台获取的&#xff08;或者查数据库最直接&#xff09;。 获取不到也没关系&#xff0c;可以通过添加cookie的方式绕过验证码。 一、抓登录cookie 1.登…

网站拒绝访问_你的网站被为什么会被DDoS攻击 如何防御DDoS

互联网安全威胁无处不在&#xff0c;随着网络安全问题的不断演化&#xff0c;DDoS攻击情况愈演愈烈&#xff0c;侵害了很多网站的利益&#xff0c;甚至威胁了很多网站的生存。DDoS攻击日趋增强据卡巴斯基2018 Q3全球DDoS攻击分析报告指出&#xff0c;在DDoS攻击方面&#xff0c…