在.Net framework中,一个不太被大家熟知的工具就是MSBuild。这个命令行工具通过执行XML脚本可以自动生成软件工程文件。

但问题来了,“我为什么想要我的生成过程自动化?”。 其实,大部分普通的的项目都有可能包含一系列的生成过程,例如:

  • · 增加版本号
  • · 编译源代码
  • · 针对不同的部署环境选择正确的设置(例如,测试或者现场)
  • · 在安装包中引入第三方的依赖

像这些工作,如果手动生成我们想要的一定是一个会非常耗时,容易出错的过程。并且我们一开始在创建脚本时花的时间完全可以被后来的自动化过程给抵消掉,还有如果我们采用手工的方式的话,我们会经常出错,并且做很做重复的工作。

好了,现在希望在你的心里已经有个理念就是我们可以从自动化生成中获得很多好处,那么我们现在开始我们的第一个脚本,让我们看一下我们的第一个例子,下面是一个ASP .NET MVC web site.

注意看,除了web.config文件, 还存在live.config 和 test.config 文件。现在的想法是:web.config包含所有的关于网站的配置, live.config和test.config仅仅包含那些跟部署环境相关的配置。这样能避免不同文件中的重复配置导致的头痛问题。 但是这样也给我们增加了挑战,那就是当我进行生成操作时,我们需要把部署环境相关的配置合并到web.confg中。

在开始之前,下面的列出了 构成项目生成的几个步骤

  • ·        清理删除bin目录下的文件
  • ·        编译工程
  • ·        复制所有的部署需要的文件到一个新的输出目录
  • ·        合并配置文件
  • ·        部署生成的输出文件到正确的环境

每一个工程都拥有它自己的生成过程, 但是为了更好的展示,我们的这个相当简单。

然后,让我们开始今天的教程,第一步就是添加一个新的XML文件到该网站的根目录,添加完后, 我们下一步就是清理删除bin目录, 目的是服务下一个编译过程。我们的脚本会是下面这样

 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Clean">
<ItemGroup>
<BinFiles Include="bin\*.*" />
</ItemGroup>
<Delete Files="@(BinFiles)" />
</Target>
</Project>

在这有一些点需要明确的是:

  1. 引入命名空间是让Visual Studio 能为MSBuild的功能提供智能提示功能。
  2. MSBuild 脚本主要是由targets组成,每一个targets都包含一个或tasks。 在这个例子中,我们的target是Clean, 任务是Delete.
  3. ItemGroups用来定义一组items. 在我们的例子中它定义的是存放在bin文件夹下的所有文件。
  4. 所有的路径名,像 bin\ *.*,都是相对于生成脚本自己的。

好的。既然我们已经创建完了第一个target. 让我们开始执行它。 打开命令行窗口并且把路径切换到包含你的生成脚本的文件下,执行下面的语句

msbuild Build.xml /t:Clean 

如果你遇到MSBuild could not be found的错误, 你需要给它指定个全路径名(我的是C:\Program Files (x86)\MSBuild\12.0\Bin), 或者是添加它的路径到Path环境变量中, 我个人比较推荐后面一种方式。

运行完这个命令,bin文件夹下应该是空的。为了让自己看到效果,最好在执行该命令之前确保bin文件夹下是有东西的。

好,让我们继续下一步:编译该工程,为了实现该功能,我们创建了一个Compile的target. 然后用MSBuild task去执行这个编译过程。

<Target Name="Compile" DependsOnTargets="Clean">
<MSBuild Projects="BuildDemoSite.csproj" />
</Target>

同样的,我们执行下面的命令,你就可以从命令提示框中看到执行的过程,然后检查一下自己的项目已经被编译完成。

msbuild Build.xml /t:Compile

好了,直到现在我们已经完成了:

  • 了解生成过程包含什么?
  • 决定去实现生成自动化。
  • 创建了删除bin文件夹和编译工程的targets.

MSbuild 教程的更多相关文章

  1. MSBuild 教程(2)

    如果你没有看过第一部分教程,请先看完后再回到这里来继续我们的第二部分. 我们下一步的工作是发布我们的网站,也就是创建Publish target. 为了能使我们的target工作,我们需要给它传递两个 ...

  2. WIX 安装部署教程(六) 为你收集的七个知识点

    前段时间整理5篇WIX(Windows Installer XML)的安装教程,但还不够完善,这里继续整理了七个知识点分享给大家.WIX最新版本3.8,点击下载 WIX安装部署(一)同MSBuild自 ...

  3. WPF入门教程系列三——Application介绍(续)

    接上文WPF入门教程系列二——Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...

  4. 转 Windows+VS2013爆详细Caffe编译安装教程

    1. 安装cuda Cuda是英伟达推出的GPU加速运算平台 我这里安装的是cuda7.5,已经安装过的忽略,还没有安装过的这里有安装教程.windows下面安装还是非常简单的. 点击打开链接    ...

  5. 每日构建【Daily Build Using CruiseControl.NET and MSBuild】(转载)

    在上一篇项目 管理实践教程二.源代码控制[Source Control Using VisualSVN Server and TortoiseSVN]中 我们已经讲解了如何使用TortoiseSVN和 ...

  6. 项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】

    在上一篇项目管理实践教程二.源代码控制[Source Control Using VisualSVN Server and TortoiseSVN]中我们已经讲解了如何使用TortoiseSVN和Vi ...

  7. 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】

    今天,我们首先安装一些必须的软件,主要有下面的4个,其中软件1和2使用在服务器机上,软件3和4安装在客户端机上.另外,我们还有用到MSBuild.RoboCopy.WebDeployment等等,在下 ...

  8. .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)

    一.前言 本篇开发环境?1.操作系统: Windows 10 X642.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core下载地址 ...

  9. .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)

    一.前言 本篇开发环境?1.操作系统:CentOS7(因为ken比较偏爱CentOS7)2.SDK版本:.NET Core 2.0 Preview 你可能需要的前置知识1.了解如何通过Hyper-V安 ...

随机推荐

  1. RHEL7虚拟机中不重启的情况下加新硬盘及扩展根分区容量

    在VMware中添加一块新的5G硬盘 显示当前分区 # fdisk -l 通常在你在虚拟机中添加一块新硬盘时,你可能会看到新硬盘没有自动加载.这是因为连接到硬盘的SCSI总线需要重新扫描来使得新硬盘可 ...

  2. Bootstarp--全局CSS样式之表格

    表格在实际开发中可以说是非常常见的,但是有很多人不喜欢使用表格,但个人觉得在简单的界面布局中使用表格还是很简单的.毕竟人家给了表格这元素,而你却不去使用,貌似有点不解风情. 下面简单介绍Bootstr ...

  3. oracle学习笔记4:PL/SQL

    PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下: [declare] --声明部分,可选 begin --执行部分,必须 [exception] --异常处理部分,可选 e ...

  4. (三)Struts2 拦截器

    所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:拦截器简介 (百度百科Struts2) Struts2 拦截器是在访问某 ...

  5. HDU 1074 Doing Homework (dp+状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一 ...

  6. POJ 1631 Bridging signals(LIS O(nlogn)算法)

    Bridging signals Description 'Oh no, they've done it again', cries the chief designer at the Waferla ...

  7. IE6 兼容问题总结

    1 IE6,IE7下设置body{overflow:hidden;}失效Bug

  8. Centos 6.5 RedHat 6 安装mysql

    所需文件列表, 这些文件在安装光盘内的Packages文件夹内, 也可以到MySQL官方网站下载其他版本(需要FQ). 将这些文件放在/usr/loca/src文件夹: -.el6.x86_64.rp ...

  9. 配置并学习微信JS-SDK(2)—扫一扫接口http://www.qq210.com/shoutu/android

    http://www.qq210.com/shoutu/android //c_开头的js变量是服务器传过来的 var c_access_token = "<?=$access_tok ...

  10. CentOS6.5 编译安装lnmp环境

    参考:http://54im.com/tag/libmcrypt http://www.educity.cn/linux/1240338.html 设置防火墙,并开启3306 80端口:vi /etc ...