MSBuild 教程(2)
如果你没有看过第一部分教程,请先看完后再回到这里来继续我们的第二部分。
我们下一步的工作是发布我们的网站,也就是创建Publish target. 为了能使我们的target工作,我们需要给它传递两个属性,WebProjectOutputDir 和 OutDir, 这两个变量将确保我们能把我们的网站文件发布到正确的目录下面。
MSbuild 允许我们声明一个PropertyGroup, 在这个PropertyGroup中,我们可以创建一些中间变量用来存储一些设置数据,当我们进行读写操作的时候,我们会需要这些设置数据。
好了,看例子:
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Run">
<PropertyGroup>
<OutputFolder>Output</OutputFolder>
</PropertyGroup> <Target Name="Run">
<CallTarget Targets="Clean" />
<CallTarget Targets="Publish" />
</Target> <Target Name="Clean">
<ItemGroup>
<BinFiles Include="bin\*.*" />
</ItemGroup>
<Delete Files="@(BinFiles)" />
</Target> <Target Name="Publish">
<RemoveDir Directories="$(OutputFolder)" ContinueOnError="true" />
<MSBuild Projects="BuildDemoSite.csproj"
Targets="ResolveReferences;_CopyWebApplication"
Properties="WebProjectOutputDir=$(OutputFolder);OutDir=$(WebProjectOutputDir)\" />
</Target>
</Project>
正如你看到的,ResolveReferences target也被调用了,这是为了确保第三方的依赖也能够复制到Output目录下。
执行命令:msbuild build.xml, 结果如下

但是你也许注意到,在Output目录下,一些我不想复制的文件也一并复制了进来,比如Build.xml脚本本身,还有一些环境相关的配置文件:Live.Config & Test.Config. 那是因为它们的build action设置成了content, 你只要把build action设置成None,然后在重新执行下脚本,就不会出现上面的问题了。

现在这个网站基本上能够部署了,但是我们还需要把环境相关的配置复制到 web.config中来,那我们现在就开始这个教程
正如我们在 第一部分教程中提到的,除了web.config 文件,我们还有live.config 和 test.config文件。 同时web.config包含关于网站的所有配置,live.config和 test.config包含一些与部署环境相关的一些配置,接下来的工作就是要把部署环境相关的值正确的复制到web.config中来。
为了实现这个目的,我们通常的思路是用XPath从一个文件中读取配置信息,然后再通过XPath把这个信息写到另一个文件中去。但是快速浏览下内置的Task,没有找到有这个功能的,庆幸的是,MSBuild Community Tasks Project拯救了我们,它提供了XmlRead 和 XmllUpdate task。那先让我们下载,安装它。
在用他们之前,我们要确保下面的XML已经插入到我们的build.xml的根节点上了
<Import Project="C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
然后我们增加一个Environment的中间变量在PropertyGroup中,当前它是被硬编码的写成了Test,我们会在以后的教程成修改这个,让它可以配置。
<PropertyGroup>
<Environment>Test</Environment>
<CompilationDebug />
<OutputFolder>Output</OutputFolder>
</PropertyGroup>
好,我们第一步是用XmlRead task去获取环境配置的数据,当前我只列举了XmlRead的一个例子, 你可以添加更多
<Target Name="GetConfig">
<XmlRead XPath="configuration/system.web/compilation/@debug"
XmlFileName="$(Environment).config">
<Output TaskParameter="Value" PropertyName="CompilationDebug" />
</XmlRead>
</Target>
- GetConfig target包含所有的Xmlread task
- XmlFileName属性有个变量 $(Environment).config,这个变量指向的是我们的前面硬编码的Test.
- Output是用来把XmlRead的返回值存储到CompilationDebug属性中。
几乎同样的,我们的XmlUpdate采用同样的语法, 其中注意的是 DependsOnTargets=”GetConfig”是确保复制数据的时候,要先读再写。
<Target Name="SetConfig" DependsOnTargets="GetConfig">
<XmlUpdate XPath="configuration/system.web/compilation/@debug"
XmlFileName="Output\web.config"
Value="$(CompilationDebug)" />
</Target>
好了,让我们开始见证奇迹的时候,执行下面的命令
msbuild Build.xml /t:SetConfig
检查一下是不是所有的命令都工作,打开output文件下的web.config文件,看看数据是不是跟Test.config中的一致。
你可以查看整个build.xml的代码
MSBuild 教程(2)的更多相关文章
- MSbuild 教程
在.Net framework中,一个不太被大家熟知的工具就是MSBuild.这个命令行工具通过执行XML脚本可以自动生成软件工程文件. 但问题来了,“我为什么想要我的生成过程自动化?”. 其实,大部 ...
- 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安 ...
随机推荐
- iOS开发中.pch 文件的使用及其相关工程设置
.pch文件 也是一个头文件,pch头文件的内容能被项目中的其他所有源文件共享和访问.是一个预编译文件. 首先说一下pch的作用: 1.存放一些全局的宏(整个项目中都用得上的宏) 2.用来包含一些全部 ...
- 简洁JS 日历控件 支持日期和月份选择
原文出处 以下这个JS日历控件是我的闲暇之余自己编写的,所有的代码全部在IE7/IE8/Firefox下面测试通过, 而且可以解决被iframe层遮盖的问题.现在只提供两种风格(简洁版和古典版)和两种 ...
- JavaScript原型模式
一.提到原型模式,和构造函数关系密切,先讲一下它 javascript没有类,通过函数来模拟实现类,用new来创建对象,函数内部的this指针来指向调用它的对象. 事例中创建对象myGril,这个对象 ...
- <div>相关
定义 <div>是一个块级元素[会自动换行] 用法 <div>可用于划分独立的一个块状区域,其内部内容显示在<div>的content部分内 结构 [盗用张图] 从 ...
- 第二部分 Nhibernate中的类型
NHibernate类型..net类型.数据库字段类型映射关系 因为NHibernate类型和c#数据类型是对应的,所以也分为值类型和引用类型,另外还有几个特殊的类,我们分别介绍: -- 值类型 | ...
- 在解决方案中添加Layout,Image文件夹
在解决方案中添加文件夹如Layout,Image,可以使用映射的方式(右键该解决方案,添加对Layout的映射),这样IIS的地址和该文件夹就绑定了:拖该文件夹中的 文件时,显示的就是该文件在IIS中 ...
- C#将汉字转换成全拼的拼音EcanConvertToCh帮助类 (转)
点击下载 EcanConvertToCh.rar 主要功能就是将汉字转换成全拼的拼音,只要你输入一个汉字就会相应的转成拼音 /// <summary> /// 编 码 人:苏飞 /// 联 ...
- PAT_1010 一元多项式求导
题目描述: 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- boost::xml————又一次失败的尝试
尝试使用wptree来进行xml解析,又一次失败了,可以正常读取正常输出,但是使用wptree进行节点读取失败(乱码) 请看源码: DealXml.h #pragma once #include &l ...
- JavaScript学习总结【2】、JS基础
1.JS 命名规范 命名规范是很有必要的,可增强代码的可读性,一眼就能看懂要表达的意思,规范就是符合规则,使代码有利于后期维护,也能很大程度的提高开发效率.一个正常的网站有很多 JS 代码,如果在编写 ...