引:http://www.kuqin.com/managetool/20081104/25611.html
今天,我们首先安装一些必须的软件,主要有下面的4个,其中软件1和2使用在服务器机上,软件3和4安装在客户端机上。另外,我们还有用到MSBuild、RoboCopy、WebDeployment等等,在下面的文章中用到的时侯,我会介绍给大家。
|
软件 |
最新版本 |
简单说明 |
1 |
VisualSVN Server |
1.7.1 |
版本控制、用户及权限管理 |
2 |
CruiseControl.NET |
1.4 |
每日构建服务器端 |
3 |
TortoiseSVN |
1.5.5.14361 |
版本控制客户端 |
4 |
CruiseControl.NET CCTray |
1.4 |
监视构建状态 |
1.VisualSVN Server,最新版本是1.7.1,你可以在这里下载:
http://www.visualsvn.com/files/VisualSVN-Server-1.6.1.msi
VisualSVN Server,最新更新版本是1.6.2,你可以在这里下载:
http://www.visualsvn.com/files/VisualSVN-Server-1.6.2.msi
VisualSVN Server Documentation下载:
http://www.visualsvn.com/server/doc/VisualSVN-Server.pdf
下载后,运行 VisualSVN-Server-1.6.1.msi 程序,点击Next,下面的截图顺序即为安装步骤:
注意:Server Port那里,默认端口有80/81/8080三个;如果最后面的CheckBox被选中,则表示使用安全连接【https协议】,这是的端口只有433/8433二个可用。
2.CruiseControl.NET ,最新版本是1.4,你可以在这里下载:
http://ccnetlive.thoughtworks.com/CCNet-builds/1.4/1.4.0.3769/CruiseControl.NET-1.4-Setup.exe
CruiseControl.NET Documentation可以在下面的网址查看:
http://confluence.public.thoughtworks.org/display/CCNET/Documentation
下载后,运行CruiseControl.NET-1.4-Setup.exe程序,点击Next=》I Agree,下面的截图顺序即为安装步骤:
3.TortoiseSVN ,最新版本是1.5.5.14361,你可以在这里下载:
http://downloads.sourceforge.net/tortoisesvn/TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi?download
简体中文语言包下载:
http://downloads.sourceforge.net/tortoisesvn/LanguagePack_1.5.5.14361-win32-zh_CN.msi?download
TortoiseSVN 中文资料:
http://www.subversion.org.cn/tsvndoc/
http://www.isubversion.com.cn/help/tortoise/
下载后,运行 TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi 程序,点击Next,下面的截图顺序即为安装步骤:
点击Finish按钮后会提示重启系统,其实不重启也没有关系,呵呵:-)
4.CruiseControl.NET CCTray ,最新版本是1.4,你可以在这里下载:
http://ccnetlive.thoughtworks.com/CCNet-builds/1.4/1.4.0.3769/CruiseControl.NET-CCTray-1.4-Setup.exe
下载后,运行CruiseControl.NET-CCTray-1.4-Setup.exe程序,点击Next=》I Agree,下面的截图顺序即为安装步骤:
一、VisualSVN Server的配置和使用方法【服务器端】
安装好VisualSVN Server后【安装过程看这里】,运行VisualSVN Server Manger,下面是启动界面:
注意:上图中的CheckBox如果选中,则在代码库StartKit下面会创建trunk、branches、tags三个子目录;不选中,则只创建空的代码库StartKit。
点击OK按钮,代码库就创建成功了。
创建完代码库后,没有任何内容在里面。我会在这个教程的第二部分说明如何迁入源代码。
下面,我们开始安全性设置,在左侧的Users上点击右键:
输入上面的信息,点击OK,我们就创建一个用户了。按照上面的过程,分别添加用户Developer1、tester1、manager1,好了,我们开始添加这些用户到我们刚才创建的项目里:
点击上图中的"Add..."按钮,在下图中选择我们刚才添加的用户,点击OK按钮:
说明:大家可能注意到了下图中的Groups,是的,你也可以先创建组,把用户添加到各个组中,然后对组进行授权,操作比较简单,在此略过。
按照下图所示,分别对用户【或组】进行授权:
点击"确定"按钮,上面的用户就具有了访问StartKit代码库的不同权限。
因为用户starter在团队中是新来者,不希望他向代码库中提交新代码,所以他只能读取代码库中的代码,不能提交代码。tester1是测试人员,不负责代码编写,所以也是只读权限。而Developer1和manager1是开发人员和项目经理,自然具有读、写的权限。
在实际的项目开发过程中,Developer和tester往往不可能只有一个人,这时候使用组来授权更加方便,这个大家可以自己练习一下。
二、TotoiseSVN的基本使用方法
在 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】中,我已经讲解了怎样安装TortoiseSVN。在上面的讲解中已经讲了怎么使用VisualSVN Server了,今天我要讲的是,TortoiseSVN的简单使用方法。
假如我们使用Visual Studio在文件夹StartKit中创建了一个项目,我们要把这个项目的源代码签入到SVN Server上的代码库中里,首先右键点击StartKit文件夹,这时候的右键菜单如下图所示:
图2-2-1
点击Import,弹出下面的窗体,其中http://zt.net.henu.edu.cn 是服务器名,svn是代码仓库的根目录,StartKit是我们在上个教程中添加的一个代码库:
说明:左下角的CheckBox,在第一次签入源代码时没有用,但是,在以后你提交代码的时候是非常有用的。
图2-2-2
点击OK按钮,会弹出下面的窗体,要求输入凭据:
图2-2-3
在上面的窗体中输入用户名和密码,点击OK按钮:
图2-2-4
如上图所示,好了,源代码已经成功签入SVN服务器了。这时候团队成员就可以迁出SVN服务器上的源代码到自己的机器了。
在本机创建文件夹StartKit,右键点击Checkout,弹出如下图的窗体:
图2-2-5
在上图中URL of Repository:下的文本框中输入svn server中的代码库的地址,其他默认,点击OK按钮,就开始签出源代码了。
说明:上图中的Checkout Depth,有4个选项,分别是迁出全部、只签出下一级子目录和文件、只签出文件、只签出空项目,默认的是第一项。上面的例子中,我们也可以使用web的方式访问代码库,在浏览器中输入http://zt.net.henu.edu.cn/svn/StartKit/
这时候也会弹出对话框,要求输入用户名和密码,通过验证后即可浏览代码库中的内容。
搞定!源代码已经成功签出到刚才新建的StartKit目录中。
打开StartKit目录,可以看到如下图的文件夹结构:
图2-2-5
一旦你对文件或文件夹做了任何修改,那么文件或文件夹的显示图片机会发生变化。下图中我修改了其中的二个文件:
图2-2-7
大家看一下不同状态所对应的图片:
图2-2-8
我们已经知道怎么将源代码签入到SVN服务器,怎么从服务器签出代码到本机,也简单了解了不同状态所对应的图案啦。
上面的图2-2-7中,我修改了位于Model文件中的二个文件ImageInfo.cs和NewsInfo.cs,下面演示如何提交到SVN服务器。
注意:提交源代码到服务器时,一定确保本机的代码是最新版本,否则可能提交失败,或者造成版本冲突。
在Model文件夹上点击右键或在Model文件下的空白处点击右键,点击SVN Commit…弹出下面的窗体:
图2-2-9
点击OK按钮后,弹出如下图的窗体:
图2-2-10
我们在Model文件下添加一个新的类文件UserInfo.cs,在Model文件下的空白处点击右键,点击SVN Commit…,和上面讲的提交修改过的文件到SVN服务器一样,就可以了。
另外也可以在文件UserInfo.cs上点击右键,点击TortoiseSVN=>>Add,弹出如下图的窗体:
图2-2-11
选中UserInfo.cs文件,点击OK按钮,这样并没有将这个文件提交到SVN服务器,只是将这个文件标记为源代码库库中的文件,并将其状态置为修改状态。之后,我们要再SVN Commit这个文件一次,才可以将其真正提交到SVN服务器上的代码库中。
上面讲是添加文件,实际上,添加文件夹的步骤也是一样的,这里就不说了。
这个也很简单,只要在需要更新的文件夹上点击右键或在该文件下的空白处点击右键,点击SVN Update,就可以了。
注意:更新操作可能会因为版本冲突而失败,这是可以使用合并【Merge】或其他方法解决;也可能因为锁定【Get Lock】而失败,这是需要先解锁【Release Lock】。
只要在需要重命名的文件或文件夹上点击右键,点击TortiseSVN=>>Rename…,在弹出的窗体中输入新名称,点击OK按钮,就可以了。此方法也不是直接重命名,而是将该文件或文件夹的名称标记为重命名后名称,也需要我们使用SVN Commit提交到SVN服务器后才真正重命名。
最简单就是,你直接删除文件或文件夹,然后使用SVN Commit提交更新到SVN服务器。另外一种方法是在你要删除的文件或文件夹上点击右键=>>TortoiseSVN=>>Delete删除,此方法也不是直接删除,而是将该文件或文件夹的状态置为删除,也需要我们使用SVN Commit提交到SVN服务器后才真正删除。
说明:实际上,从你把源代码迁签入SVN服务器开始,每一个版本的数据和文件,就算是你已经删除了的,也都可以随时迁出。
以上只是TortoiseSVN最简单的几个功能,其实他的功能远不止这些,其他的功能大家可以在使用的过程中慢慢体会,有些功能我会在下面的教程中使用到,到时候会和大家讲清楚用法。
注意:向SVN服务器提交源代码的时候,一定不要提交bin、obj等文件夹,否则会很麻烦。但是web项目的bin目录除外,但是web项目的bin目录中的引用其他项目而生成的dll不需要提交。
一个好习惯:如果项目中引用了其他的第三方的程序集,比如EnterpriseLibrary、FCKEditor等,这时候不要简单从他们的安装位置引用,而是在你的解决方案下,添加一个Library的目录,把需要的程序集复制到这里,然后从Library目录引用,这样有什么好处,自己想一想吧!
使用CruiseControl.NET和MSBuild来搭建每日构建系统。
在第一篇项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】 中我们已经安装了CruiseControl.NET 1.4,因为我们还要用到MSBuild,所以如果你的系统没有安装Visual Studio,那么你需要首先安装Visual Studio 2005/2008,我们在这里使用的是Visual Studio 2008,准备好这些了吗?OK,我们正式开始今天的课程!
首先,我们要配置CruiseControl.NET【下面简写为CCNET】,配置完成后,我们每次提交源代码到SVN服务器后,CCNET就可以自动从SVN服务器上签出源代码,并调用MSBuild自动进行编译。我们以昨天的教程中创建的StartKit项目为实例,先看看下面的配置文件:
1 <cruisecontrol xmlns:cb="urn:ccnet.config.builder">
2
3 <name>StartKitname>
4
5 <labeller type="defaultlabeller">
6
7 <prefix>StartKit-1-prefix>
8
9 <incrementOnFailure>falseincrementOnFailure>
10
11 <labelFormat>00000labelFormat>
12 labeller>
13
14 <webURL>http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspxwebURL>
15
16 <triggers>
17
18 <intervalTrigger seconds="60" />
19 triggers>
20
21 <modificationDelaySeconds>2modificationDelaySeconds>
22
23 <sourcecontrol type="svn">
24
25 <trunkUrl>http://zt.net.henu.edu.cn/svn/StartKit/StartKit/trunkUrl>
26
27 <executable>C:/Program Files/VisualSVN Server/bin/svn.exeexecutable>
28
29 <username>starterusername>
30
31 <password>123456password>
32
33
35 <tracProjectUrl>http://svn.net.henu.edu.cn/pojects/StartKit/tracProjectUrl>
36
37 <tracRepositoryRoot>/StartKittracRepositoryRoot>
38 webUrlBuilder>-->
39 sourcecontrol>
40
41 <tasks>
42
43 <msbuild>
44
45 <executable>C:/WINDOWS/Microsoft.NET/Framework/v3.5/MSBuild.exeexecutable>
46
47
48 <workingDirectory>D:/Program Files/CruiseControl.NET/server/StartKit/WorkingDirectoryworkingDirectory>
49
50
51 <artifactDirectory> D:/Program Files/CruiseControl.NET/server/StartKit/ ArtifactsartifactDirectory>
52
53 <projectFile>StartKit.slnprojectFile>
54
55 <buildArgs>/p:configuration=debugbuildArgs>
56
57
58 <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,D:/Program Files/CruiseControl.NET/server/ThoughtWorks.CruiseControl.MsBuild.dlllogger>
59
60 <targets />
61 msbuild>
62
63 tasks>
64
65
66 <state type="state" directory="D:/Program Files/CruiseControl.NET/server/CCState" />
67
68 <publishers>
69
70 <buildpublisher>
71
72
73 <sourceDir> D:/Program Files/CruiseControl.NET/server/StartKit/WorkingDirectory sourceDir>
74
75
76 <publishDir> D:/Program Files/CruiseControl.NET/server/StartKit/HistoryVersion publishDir>
77 buildpublisher>
78
79 <merge>
80
81 <files>
82
83 <file>D:/Program Files/CruiseControl.NET/server/StartKit/WorkingDirectory/results.xmlfile>
84 files>
85 merge>
86
87 <xmllogger />
88
89 <modificationHistory />
90
91 <statistics />
92
93
94 <email mailhost="smtp.qq.com" mailport="25"
95 mailhostUsername="******" mailhostPassword="******" from="******@qq.com" includeDetails="true">
96
97 <users>
98
99 <user name="zt" group="StartKit" address="******[email protected]" />
100 <user name="***" group="StartKit" address="******[email protected]" />
101 <user name="***" group="StartKit" address="******[email protected]" />
102 users>
103
104 <groups>
105 106 <group name="StartKit " notification="always" /> 107 groups>
108 email>
109 publishers>
110 project>
111
117 cruisecontrol
好了,我们已经对CCNET的配置文件有了大致的了解,接下来,你打开CCNET的安装路径,找到子目录server下的ccnet.config文件,把上面的配置信息Copy到ccnet.config文件中,记得把配置文件中的一些路径修改为自己的实际路径啊,修改好后,保存。这时候,检查Windows服务CruiseControl.NET Server是否启动,如果没有则启动它,启动该服务后,打开浏览在地址栏输入上面配置文件中的webUrl地址:http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx 也可以直接输入http://202.196.96.55:8080/server/ ,这里是演示地址,要根据自己的实际情况修改为正确的地址,OK,看到类似下图的效果,好了,搞定!如果你遇到了什么麻烦,请在下面留言,我一定会及时回复!
点击StartKit,转入下图所示的页面:
OK,到这里,我们提交更新到SVN服务器后,CCNET就会根据我们配置自动编译项目,而且我们也可以通过Web Dashboard来查看具体的编译信息了,提示如果配置了邮件发送,那么我们还可以通过邮件收到详细的编译信息,怎么样?够方便吧!
其实,CCNET的功能是相当强大的,上面只是最常用的配置,其他还有很多非常好的功能。你想知道吗?那你可以在这里查看CCNET官方文档 ,实际上,你安装CCNET后,文档也已经安装到你的电脑了,在CCNET的安装目录下的webdashboard的子目录doc中就是。
好了,我们今天的教程就到这里,本来我应该把如何使用CruiseControl.NET Tray来监视每次更新后的编译状态,但是今天真的太晚了,明天还要做项目,所以我明天补上,请大家见谅!
补充部分:
下面我简单讲一下,如何使用CruiseControl.NET Tray【以下简称CCTray】来监视每次提交后的编译状态。
安装好打开CCTray后,运行CCTray程序,点击左上角的菜单File下的Settings…,如下图:
点击Settings…会弹出下面的窗体:
切换到Build Projects选项卡,如下图:
点击Add…按钮,添加我们的CCNET服务器,如下图:
输入我们的CCNET服务器后,CCNET服务器上的项目就会在右侧显示出来,如下图:
选中右侧的项目后,点击OK按钮,返回CCTray打开时的界面,我们的二个项目已经添加进来了,如下图:
我们在桌面的右下角的任务栏,可以看到如下图所示的图标:
绿色的那个标示就是CCTray的标示,绿色表示所有的项目都通过了编译,紫红色表示至少有一个项目没有通过编译,橘黄色表示有项目正在编译,橘红色表示有项目被强制编译,显示为灰色则说明和CCNET服务器失去了链接。
OK,大家可以使用CCTray实时监视提交更新后项目的编译状态了。
一、BugNET
BugNET是一个非常优秀的开源软件,基于.NET Framework2.0 ,使用ASP.NET+SQL Server开发的网站项目, 另外项目中还使用了Microsoft Report Viewer Redistributable 2005和Microsoft ASP.NET AJAX 1.0。
最新版本是:BugNET 0.7.921.0
官方主页:http://bugnetproject.com/
最新版本下载:http://downloads.sourceforge.net/bugnet/BugNET-0.7.921-Install.zip
源代码下载:http://downloads.sourceforge.net/bugnet/BugNET-0.7.921-Source.zip
英文文档:http://bugnetproject.com/Documentation/tabid/57/topic/Installation/Default.aspx
它具有发送邮件、生成报表、项目配置管理、人员及权限管理、Bug管理等等功能。下面简单说一下它的安装和配置:
1.解压缩最新的BugNET安装包到一个指定目录中(比如 C:/BugNET)。如果需要源代码,请到这里下载。
2.确保你已经在你机器的IIS上为BugNET创建一个虚拟目录,指向你第一步中解压出来的文件所在的文件夹(比如:C:/BugNET)。那么URL就应该是http://localhost/BugNet 。
3.使用Windows资源管理器,打开网站的根目录(默认是C:/BugNET)。右键点击该目录,在弹出菜单中选择"共享和安全"(请注意:如果你是有的是Windows XP,在查看这些选项之前,你可能需要启用"简单文件共享")。选择"安全"选项卡。添加合适的用户帐户并设置权限。
如果你使用的是Windows2000-IIS5
- 用户帐户{Server}/ASPNET 必须具有BugNET对应的虚拟目录的读、写和修改权限
如果你使用的是Windows2003 - IIS6
- 用户帐户 NT AUTHORITY/NETWORK SERVICE必须具有BugNET对应的虚拟目录的读、写和修改权限
4. 在你的SQL Server上创建一个空的数据库(例如数据库名称是'BugNET')。如果是升级操作,那么在做任何操作之前,请备份你的数据库。
5.使用文本编辑器编辑Web.config文件。找到"LocalSqlServer"连接字符串设置,并修改"connectionString"属性值和你在第四步中创建的数据库一致。
providername="" />
6.浏览http://localhost/BugNet/Install/Install.aspx (或者你在第二步中创建的虚拟目录)。
7.安装进程开始。
8.安装完成后,你就可以使用admin用户帐户登录了。
用户名:admin
密码:password
这样,你的BugNET安装完成了,应该可以在http://localhost/BugNet 访问,如果有什么安装问题,请访问支持论坛。
下面是运行后,BugNET首页的截图:
我想看完这篇文章,你一定会自己试一试吧!
OK, That's all what I say , and now, it's your turn.
不好意思,由于下面的二款软件不太熟悉,而且由于最近压力比较大,实在也抽不出时间,所以找了一些相关的资料给大家参考,请大家见谅!
二、BugFree
BugFree是借鉴微软公司软件研发理念、免费且开放源代码、基于Web的精简版缺陷管理系统。它是目前唯一"克隆"微软内部Bug管理工具 Product Stuido(以前叫Raid)的自由软件。BugFree是用PHP+MySQL写,在Linux和Windows平台上都可以运行,我们推荐的使用环境是LAMP(Linux+Apache+MySQL+PHP)。
下面是是园子里的一些资源,由于同类的资源较多,只选取了较新的几篇。
Bugfree使用点滴。
http://www.cnblogs.com/idragonet/archive/2008/06/04/1213357.html
[原创]如何在Windows下安装Bugfree2.0.0.1
http://www.cnblogs.com/mayingbao/archive/2008/09/09/1287523.html
缺陷管理工具bugfree安装说明
http://www.cnblogs.com/etian/archive/2008/06/05/1214588.html
三、Trac+Apache+SVN
Trac 是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。 Trac 以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件; Trac 应用力求不影响现有团队的开发过程。
Trac功能:
Wiki:这个就不用说了吧
Timeline: 可以看看最近有哪些文件被更新, 可以快速跟上进度
Roadmap:项目进度包括那些阶段, 可以看目前进度状况,依照 Ticket的设定, Ticket 可以指向某个 Milestone, 已便追踪目前项目的完成进度.
Browse Source: 和SVN集成后,可以查看源代码及SVN的代码提交日志
View Tickets: 看目前有哪些Ticket, 看哪些沒有完成(常用: My Tickets, Active Tickets) 等等
Tickets包含下面的类型:
1. Active Tickets - 目前有哪些 Tickets 是 Active 的
2. Active Tickets by Version
3. Active Tickets by Milestone - 靠 Milestone 划分 Active Tickets
4. Assigned, Active Tickets by Owner
5. Assigned, Active Tickets by Owner (Full Description)
6. All Tickets By Milestone (Including closed) - 列出所有 Tickets
7. My Tickets - 列出属于自己的 Tickets
8. Active Tickets, Mine first - 列出所有 Active Tickets, 依照重要性排列
New Ticket:添加一个新的Ticket,即一个可能的Bug条目。
Search:搜索功能
下面是园子里的一些文章,大家如果有兴趣,也可以到网上找到很多类似的文章。
Trac 手记(一) : Windows 下安装 Trac
http://www.cnblogs.com/zealic/archive/2007/12/29/1019837.html
win32上安装Apache+SVN+Trac笔记
http://www.cnblogs.com/nobel1984/archive/2008/11/03/1325772.html
如何使用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打开部署项目文件:
修改部署项目文件为下面的内容:
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">DebugConfiguration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPUPlatform>
<ProductVersion>9.0.21022ProductVersion>
<SchemaVersion>2.0SchemaVersion>
<ProjectGuid>{00000000-0000-0000-0000-000000000000}ProjectGuid>
<SourceWebPhysicalPath>../StartKitSourceWebPhysicalPath>
<SourceWebProject>{96E1A089-3FBB-4909-94F6-172665994449}|StartKit/StartKit.csprojSourceWebProject>
<SourceWebVirtualPath>/StartKit.csprojSourceWebVirtualPath>
<TargetFrameworkVersion>v3.5TargetFrameworkVersion>
<ProjectName>StartKitProjectName>
<Major>1Major>
<Minor>0Minor>
<Revision>0Revision>
<VSSName>ttzhangVSSName>
<VSSPassword>123456VSSPassword>
<FtpName>anonymousFtpName>
<FtpPassword>anonymousFtpPassword>
<SmtpServerName>smtp.163.comSmtpServerName>
<FromAddress>[email protected]FromAddress>
<ToAddress>[email protected]ToAddress>
<MailPassword>testmailMailPassword>
PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>trueDebugSymbols>
<OutputPath>./DebugOutputPath>
<EnableUpdateable>trueEnableUpdateable>
<UseMerge>trueUseMerge>
<SingleAssemblyName>StartKit_deploySingleAssemblyName>
PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>falseDebugSymbols>
<OutputPath>./ReleaseOutputPath>
<EnableUpdateable>trueEnableUpdateable>
<UseMerge>trueUseMerge>
<SingleAssemblyName>StartKit_deploySingleAssemblyName>
PropertyGroup>
<ItemGroup>
ItemGroup>
<ItemGroup>
<ProjectReference Include="../BLL/BLL.csproj">
<Project>{73A293A1-CDCC-4919-9B05-BA2531ADDB56}Project>
<Name>BLLName>
ProjectReference>
<ProjectReference Include="../DAL/DAL.csproj">
<Project>{AFF6077D-DD2D-48A0-BFAD-051BD67A6953}Project>
<Name>DALName>
ProjectReference>
<ProjectReference Include="../IBLL/IBLL.csproj">
<Project>{620770BB-7A27-4585-9B97-44EEE349121D}Project>
<Name>IBLLName>
ProjectReference>
<ProjectReference Include="../Model/Model.csproj">
<Project>{EA43EC2E-5890-4431-BD3E-5F6C090DEA3A}Project>
<Name>ModelName>
ProjectReference>
ItemGroup>
<Import Project="$(MSBuildExtensionsPath)/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets" />
<Target Name="BuildProjectReferences">
<MSBuild Projects="@(ProjectReference)" Targets="Build" />
Target>
<Target Name="Zip">
<Time Format="yyyyMMddHHmmss">
<Output TaskParameter="FormattedTime" PropertyName="buildDate"/>
Time>
<Zip Files="@(ZipFiles)" ZipFileName="StartKit V$(Major)-$(Minor)-$(Revision)-$(buildDate).zip"/>
Target>
<Target Name="Copy">
<ServiceController ServiceName="w3svc" Action="Stop" />
<Exec Command="Robocopy Debug c:/inetpub/StartKit /MIR /XD Fckeditor attachments .svn obj doc Test /XF *.zip *.wdproj *.user *.cs *.csproj" IgnoreExitCode="true" />
<ServiceController ServiceName="w3svc" Action="Start" />
Target>
<Import Project="$(MSBuildExtensionsPath)/Microsoft/WebDeployment/v9.0/Microsoft.WebDeployment.targets" />
<Target Name="BeforeBuild">Target>
<Target Name="BeforeMerge">Target>
<Target Name="AfterMerge">Target>
<Target Name="AfterBuild">
不想生成ZIP文件,可以注释下面ZIP的target-->
<CallTarget Targets="Zip"/>
<CallTarget Targets="Copy" />
Target>
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 。
如何使用MSBuild+Robocopy+WebDeployment来自动编译和部署网站,今天,我们来看一下,如何使用MSBuild +SVN来自动同步数据库。
首先,将我们项目中的数据库文件和数据库日志文件放到某个目录下,这里放到StartKitDB目录下,然后在该目录下新建一个名为StartKitDB的文本文件,修改扩展名为proj,实际上,在理论上任何扩展名都可以,然后,使用记事本或其他程序打开文件,将下面的内容复制到其中,保存。
xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="All" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets"/>
<PropertyGroup>
<ConnectionString>Server=.;Integrated Security=TrueConnectionString>
PropertyGroup>
<ItemGroup>
<DBFiles Include="StartKitDB.mdf;StartKitDB_log.ldf"/>
ItemGroup>
<Target Name="ALL">
<ServiceController ServiceName="mssqlserver" Action="Restart" />
<Exec Command="OSQL -S . -E -n -Q "EXEC sp_detach_db 'StartKitDB','True'"" IgnoreExitCode="false" />
<ServiceController ServiceName="mssqlserver" Action="Stop" />
<Delete Files="C:/StartKitDB/$(DBFiles)" />
<Copy SourceFiles="@(DBFiles)" DestinationFolder="C:/StartKitDB" />
<ServiceController ServiceName="mssqlserver" Action="Start" />
<Exec Command="OSQL -S . -E -n -Q "EXEC sp_attach_db @dbname = N'StartKitDB',@filename1 = N'C:/StartKitDB/StartKitDB.mdf', @filename2 = N'C:/StartKitDB/StartKitDB_log.ldf'"" IgnoreExitCode="false" />
Target>
Project>
当然了,如果我们希望:当我们提交最新的数据库文件和日志文件到服务器后,自动从服务器分离旧版本的数据库,同时附加最新版本的数据库,那么我们就要借助CCNET和SVN服务器,所以我们首先要把存放数据库文件、日志文件及StartKitDB.proj文件的StartKitDB文件夹,纳入到我们的版本控制中。但是,如果我们简单的把这个文件添加到我们的StartKit项目的代码库中,那么,当我们提交数据库更新时,就会自动编译整个StartKit项目,而这时候,我们项目可能并没有更新,所以我们要把数据库和项目分开为二个代码库。
我们按照在项目管理实践教程二、源代码控制 中的讲解,使用VisualSVN Server添加一个代码库【Repository】StartKitDB,然后,使用TortoiseSVN把上面的三个文件迁入到SVN服务器上,最后,按照项目管理实践【三】每日构建 的讲解,在CCNET上添加一个项目【Project】,一定根据实际情况修改相应的文件路径,把tasks的子节点msbuild下的projectFile节点值配置为我们上面新建的StartKitDB.proj文件。
注意:你在CCNET中配置把SVN服务器上的数据库文件迁出的位置不要和上面的StartKitDB.proj文件中的位置相同,具体原因嘛?你可以先自己想想!
OK,搞定啦!你可以提交一次数据库到SVN服务器,试试看有没有效果,怎么样?成功了吧!嘿嘿…
这种方法适合在开发过程中使用,如果我们已经部署了项目或者已经交付给了用户,那么用户可能已经添加和更新的很多数据,此时和我们开发时在SVN上的最新版本也不一致了,这时候考虑到用户数据的安全,我们可能需要给用户的是数据库更新脚本,而且要保证用户的数据安全,那么这时候,怎么办呢?我在Visual Studio 2008中如何比较二个数据库的架构【Schema】和数据【Data】并同步做了比较详细的讲解,大家可以做个参考!