MSbuild 教程
在.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>
在这有一些点需要明确的是:
- 引入命名空间是让Visual Studio 能为MSBuild的功能提供智能提示功能。
- MSBuild 脚本主要是由targets组成,每一个targets都包含一个或tasks。 在这个例子中,我们的target是Clean, 任务是Delete.
- ItemGroups用来定义一组items. 在我们的例子中它定义的是存放在bin文件夹下的所有文件。
- 所有的路径名,像 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 教程的更多相关文章
- MSBuild 教程(2)
如果你没有看过第一部分教程,请先看完后再回到这里来继续我们的第二部分. 我们下一步的工作是发布我们的网站,也就是创建Publish target. 为了能使我们的target工作,我们需要给它传递两个 ...
- WIX 安装部署教程(六) 为你收集的七个知识点
前段时间整理5篇WIX(Windows Installer XML)的安装教程,但还不够完善,这里继续整理了七个知识点分享给大家.WIX最新版本3.8,点击下载 WIX安装部署(一)同MSBuild自 ...
- WPF入门教程系列三——Application介绍(续)
接上文WPF入门教程系列二——Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...
- 转 Windows+VS2013爆详细Caffe编译安装教程
1. 安装cuda Cuda是英伟达推出的GPU加速运算平台 我这里安装的是cuda7.5,已经安装过的忽略,还没有安装过的这里有安装教程.windows下面安装还是非常简单的. 点击打开链接 ...
- 每日构建【Daily Build Using CruiseControl.NET and MSBuild】(转载)
在上一篇项目 管理实践教程二.源代码控制[Source Control Using VisualSVN Server and TortoiseSVN]中 我们已经讲解了如何使用TortoiseSVN和 ...
- 项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】
在上一篇项目管理实践教程二.源代码控制[Source Control Using VisualSVN Server and TortoiseSVN]中我们已经讲解了如何使用TortoiseSVN和Vi ...
- 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】
今天,我们首先安装一些必须的软件,主要有下面的4个,其中软件1和2使用在服务器机上,软件3和4安装在客户端机上.另外,我们还有用到MSBuild.RoboCopy.WebDeployment等等,在下 ...
- .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
一.前言 本篇开发环境?1.操作系统: Windows 10 X642.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core下载地址 ...
- .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
一.前言 本篇开发环境?1.操作系统:CentOS7(因为ken比较偏爱CentOS7)2.SDK版本:.NET Core 2.0 Preview 你可能需要的前置知识1.了解如何通过Hyper-V安 ...
随机推荐
- 解锁Scott过程中出现的问题及解决办法
一.conn sys/sys as sysdba; //以DBA的身份登录 出现以下错误 经查 协议适配器错误的问题的原因有三个 监听服务没有起起来.windows平台个一如下操作:开始---程序-- ...
- GitHub安装失败
安装GitHub客户端的时候,会提示失败,如下: An error occurred trying to download 'http://github-windows.s3.amazonaws.co ...
- 利用Inltellj创建javadoc ,用jd2chm创建chm
现在有些框架都不带javadoc 就需要自己去生成,而且真正用起来还是chm的最方便,所以写篇日志记录一下 下面我就拿struts2的源码来来举个栗子 1.第一步:创建一个空的java项目,导入框架源 ...
- VS2010无法打开CSS问题
安装了VS2010的SP1补丁后,发现打开css文件时出现下面问题: 一点击css文件就弹出:未能完成操作.未指定的错误.无法正常进入. [解决方法]安装最新Web Standards Update补 ...
- Merge OUTPUT 高级用法综合写的一个MergeTab的存储过程
因为工作中常用到 合并两张表中的数据,主要是写下来给自己备忘,T-SQL 中 MERGE 的用法 WHEN MATCHED THEN UPDATE -- 中加了 后面要更新的列是否都相等,如果相等就没 ...
- iOS中常用的第三方
1. ZBarSDK 二维码.条形码 http://www.cnblogs.com/qingche/p/4242129.html
- Github上图文演示仓库创建
1.注册账号 https://github.com/ 2.注册完账号 创建仓库 a.点击按钮 Start a project b.填写信息,点击按钮 Create repository c.仓库信息( ...
- js Dom树结构分析
对Dom数结构的理解,对用js操作html元素有很大的意义 先来看一下下面这段html代码:(这里就以分析body中的元素来解释,因为我们基本所有的操作基本都围绕body标签来做的) <!DOC ...
- Microsoft Visual Studio 2010 遇到了异常,可能是由某个扩展导致的。 转载
问题: 今天打开好久没用的Microsoft Visual Studio 2010 ,刚才创建了一个C++工程,错误就出现了. 只要在VS2010源码编辑器中输入一个字符,它就报错 ":Mi ...
- 当 IDENTITY_INSERT 设置为 OFF 时,不能向表 中的标识列插入显式值错误的解决方法
一个主键.两个外键,把两个外键改为非空就行了. CREATE TABLE [dbo].[User_Compare]( ,) NOT NULL, [UserId] [int] NOT NULL, [Pa ...