发布一个MsBuild任务组件-可用于同时发布多个网站
2008-01-25 10:55
459 查看
组件项目: /Files/jillzhang/Publishers.rar
演示项目: /Files/jillzhang/PubliserSample.rar
在Vs 2005 没有打Sp1的时候,可以用aspnet_compiler.exe来实现发布网站的目的,它是一个命令行工具,在进行持续化集成的时候,很方
![](http://images.cnblogs.com/cnblogs_com/jillzhang/fdfd6726.jpg)
便,可打了Sp1之后,虽然也能发布网站
,但我在vs安装组件中找了遍,也没发现发布网站用的是哪个exe,没有命令行工具,持续集成就成了问题,自己动手,丰衣足食,下面介绍一下该组件的功能和特点
1. 本组件的原本用途
在持续化集成的过程中,当MsBuild.exe编译成功之后,用此组件自动发布网站。 一次支持多个网站
2. 实现原理
要想能和MsBuild进行交互,最好的办法就是将该组件作为MsBuild的一个任务,.net framework已经为我们准备好了用于创建MsBuild的基类Microsoft.Build.Utilities.Task,继承它便可以实现一个自定义MsBuild任务,在进行编译的时候,执行自己想要的操作。我这个组件就是根据配置信息,从编译好的网站文件夹中拷贝指定格式的文件到发布目录,从而达到发布网站的目的。只要更改配置,能适用于Vb.Net和C#或者其他语言开发的任何网站项目。
3. 实现方法
首先,我们先来看一下Microsoft.Build.Utilities.Task这个类的用法:
实现一个自定义得MsBuild任务需在Microsoft.Build.Utilities.Task的实现类中重写Execute方法,该方法的原型为
本组件需要的属性如下
声明这些属性的代码为:
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild1.png)
在Execute方法实现对文件的拷贝工作,在组件项目中能查到
该组件能将执行结果和执行过程通过Log记录下来。
4. 使用方法
为了演示该组件的效果,我们创建一个名为PubliserSample.sln的解决方案,方案中包括两个网站,Sample1和Sample2,结构如下图所示:
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild2.png)
我们的目的是在编译的同时将这两个网站分别发布到目录Sample1_PubliserDir和Smaple2_PubliserDir中
我们在这里只演示在msbuild.exe命令行中使用该组件,步骤如下:
将该组件的Publishers.dll文件和其依赖的FileUntility.dll拷贝到.sln相同目录
在.sln相同目录创建一个publisersample.msbuild文件,根据我机器上的项目路径,在publisersample.msbuild中添加如下代
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild3.png)
制作一个.bat文件,命名为执行演示.bat,填写如下代码
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild4.png)
执行执行演示.bat,效果如图:
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild5.png)
查看Sample1_PubliserDir和Smaple2_PubliserDir,发现网站已经被成功发布.效果如图
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild6.png)
5. 项目文件和演示项目
组件项目: /Files/jillzhang/Publishers.rar
演示项目: /Files/jillzhang/PubliserSample.rar
演示项目: /Files/jillzhang/PubliserSample.rar
在Vs 2005 没有打Sp1的时候,可以用aspnet_compiler.exe来实现发布网站的目的,它是一个命令行工具,在进行持续化集成的时候,很方
![](http://images.cnblogs.com/cnblogs_com/jillzhang/fdfd6726.jpg)
便,可打了Sp1之后,虽然也能发布网站
,但我在vs安装组件中找了遍,也没发现发布网站用的是哪个exe,没有命令行工具,持续集成就成了问题,自己动手,丰衣足食,下面介绍一下该组件的功能和特点
1. 本组件的原本用途
在持续化集成的过程中,当MsBuild.exe编译成功之后,用此组件自动发布网站。 一次支持多个网站
2. 实现原理
要想能和MsBuild进行交互,最好的办法就是将该组件作为MsBuild的一个任务,.net framework已经为我们准备好了用于创建MsBuild的基类Microsoft.Build.Utilities.Task,继承它便可以实现一个自定义MsBuild任务,在进行编译的时候,执行自己想要的操作。我这个组件就是根据配置信息,从编译好的网站文件夹中拷贝指定格式的文件到发布目录,从而达到发布网站的目的。只要更改配置,能适用于Vb.Net和C#或者其他语言开发的任何网站项目。
3. 实现方法
首先,我们先来看一下Microsoft.Build.Utilities.Task这个类的用法:
实现一个自定义得MsBuild任务需在Microsoft.Build.Utilities.Task的实现类中重写Execute方法,该方法的原型为
public abstract bool Execute ()
同时,MsBuild任务支持自定义属性,实现方法和普通类属性相同,而如果属性是必须的话,可以应用[Required]属性(Attribute)。
本组件需要的属性如下
属性名称 | 数据类型 | 是否必须 | 备注 |
SourceDir | String | 是 | 网站目录,可以指定多个网站的目录名,每个目录名之间用,隔开 |
TargetDir | String | 是 | 发布目录,可以指定多个网站的发布目录,且数目必须和SourceDir中的网站目录一致,每个目录之间用,隔开,顺序也对应SourceDir的配置 |
ExcluedStr | String | 否 | 用于指示在发布的时候,不被拷贝文件的后缀,可以包含多个后缀,用,隔开 |
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild1.png)
在Execute方法实现对文件的拷贝工作,在组件项目中能查到
该组件能将执行结果和执行过程通过Log记录下来。
4. 使用方法
为了演示该组件的效果,我们创建一个名为PubliserSample.sln的解决方案,方案中包括两个网站,Sample1和Sample2,结构如下图所示:
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild2.png)
我们的目的是在编译的同时将这两个网站分别发布到目录Sample1_PubliserDir和Smaple2_PubliserDir中
我们在这里只演示在msbuild.exe命令行中使用该组件,步骤如下:
将该组件的Publishers.dll文件和其依赖的FileUntility.dll拷贝到.sln相同目录
在.sln相同目录创建一个publisersample.msbuild文件,根据我机器上的项目路径,在publisersample.msbuild中添加如下代
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild3.png)
制作一个.bat文件,命名为执行演示.bat,填写如下代码
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild4.png)
执行执行演示.bat,效果如图:
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild5.png)
查看Sample1_PubliserDir和Smaple2_PubliserDir,发现网站已经被成功发布.效果如图
![](http://images.cnblogs.com/cnblogs_com/jillzhang/012508_0256_MsBuild6.png)
5. 项目文件和演示项目
组件项目: /Files/jillzhang/Publishers.rar
演示项目: /Files/jillzhang/PubliserSample.rar
相关文章推荐
- java--第十周--任务二 编写一个JFrame,在该窗口中组件的布局是FlowLayout。窗口中添加两个文本区,当我们在一个文本区中输入若干个数时,另一个文本区同时对输入的数进行
- 发布一个用于Oracle数据库间数据复制的组件-OraSyner
- [原创] 我的生活我安排,我的调度我做主!——介绍一个 日程安排/工作计划/任务调度 的Scheduling组件。(一)
- 通过Visual C#创建一个Windows组件,然后把其接口以COM形式发布即可(转贴)
- [发]发布一个极速的平面寻路WIN32组件
- 发布Hourlog 0.01:一个以小时为单位的任务计时工具
- IIS发布网站出现“未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。”的解决方法
- Android四大组件之service(二)——用service、scheduleAtFixedRate写一个后台定时执行任务
- 一个可以查看linux定时任务参数结果的网站
- seo初识:发布一个新的网站首先该做些什么?
- 微软发布可变形卷积网络代码:可用于多种复杂视觉任务
- 如何发布一个ASP.NET网站
- 一个很好用的开源的定时任务组件
- 发布一个类似Subsonic语法的动态生成SQL语句,并可以返回相应实体类的一个组件
- sitecopy,一个用于山寨网站UI的脚本
- 发布网站后,会生成一个PrecompiledApp.config文件的作用
- C#--第九周 任务1--定义一个静态成员方法,该方法用于提取文件名
- 发布一个好用的类SafeConvert, 用于值类型装换。
- AirExcel -用于导出 Excel 2007 文件的 Flex AIR 组件 初版发布
- 用于任务计划的定时器组件