博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
发布一个MsBuild任务组件-可用于同时发布多个网站
阅读量:6575 次
发布时间:2019-06-24

本文共 1470 字,大约阅读时间需要 4 分钟。

    

组件项目:

演示项目:  

    在Vs 2005 没有打Sp1的时候,可以用aspnet_compiler.exe来实现发布网站的目的,它是一个命令行工具,在进行持续化集成的时候,很方便,可打了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 Execute ()
同时,MsBuild任务支持自定义属性,实现方法和普通类属性相同,而如果属性是必须的话,可以应用[Required]属性(Attribute)。

本组件需要的属性如下

属性名称

数据类型

是否必须

备注

SourceDir

String

网站目录,可以指定多个网站的目录名,每个目录名之间用,隔开

TargetDir

String

发布目录,可以指定多个网站的发布目录,且数目必须和SourceDir中的网站目录一致,每个目录之间用,隔开,顺序也对应SourceDir的配置

ExcluedStr

String

用于指示在发布的时候,不被拷贝文件的后缀,可以包含多个后缀,用,隔开

声明这些属性的代码为:

 

在Execute方法实现对文件的拷贝工作,在组件项目中能查到

该组件能将执行结果和执行过程通过Log记录下来。

4. 使用方法

为了演示该组件的效果,我们创建一个名为PubliserSample.sln的解决方案,方案中包括两个网站,Sample1和Sample2,结构如下图所示:

我们的目的是在编译的同时将这两个网站分别发布到目录Sample1_PubliserDir和Smaple2_PubliserDir中

我们在这里只演示在msbuild.exe命令行中使用该组件,步骤如下:

  1. 将该组件的Publishers.dll文件和其依赖的FileUntility.dll拷贝到.sln相同目录
  2. 在.sln相同目录创建一个publisersample.msbuild文件,根据我机器上的项目路径,在publisersample.msbuild中添加如下代
      
  3. 制作一个.bat文件,命名为执行演示.bat,填写如下代码  

  

  1. 执行执行演示.bat,效果如图:

  

  1. 查看Sample1_PubliserDir和Smaple2_PubliserDir,发现网站已经被成功发布.效果如图

   

 

5. 项目文件和演示项目

组件项目:

演示项目:

 

转载地址:http://cbgjo.baihongyu.com/

你可能感兴趣的文章
java设计模式2--工厂模式
查看>>
在Mac OS X中配置Apache + PHP + MySQL
查看>>
今天天气怎么样
查看>>
free函数
查看>>
bootstrap中点击左边展开
查看>>
【转】暴露问题是对项目验收最起码的尊重!
查看>>
昆虫繁殖
查看>>
Android Spinner 下拉列表
查看>>
AR导航真的有前途,马云领衔1亿2500万投资
查看>>
POJ - 2777——Count Color(懒标记线段树二进制)
查看>>
zepto 事件分析4(事件队列)
查看>>
Silverlight/WPF中DependencyProperty使用陷阱一枚
查看>>
转:一个Sqrt函数引发的血案
查看>>
国际音标遗漏
查看>>
c++ 编译时函数匹配和运行时类型识别
查看>>
Velocity - 单例还是非单例
查看>>
mysql 安装和修改编码(utf8mb4)
查看>>
Ethernet、VLAN、QinQ
查看>>
Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)
查看>>
SQL中的ROW_NUMBER()和while循环对每一行执行操作
查看>>