MS是彻底抛弃makefile了,他新一代的build system 是MS Build.
来源:互联网 发布:淘宝网免费下载 编辑:程序博客网 时间:2024/05/01 06:18
MS是彻底抛弃makefile了,他新一代的build system 是MS Build.相当于,
探讨 Make、Ant 以及 MSBuild 无太多意义,甚至从纯技术和扩展性上来说,我认为 MSBuild 弱于 NAnt,但是软件并不是这么简单,之所以深研 MSBuild,M$ 作为后盾让人信任的无奈。
本文主要讲述 MSBuild 的基本概念,以及如何使用它辅助开发。
首先我们来看一个最简单的 Build:
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Welcome>Hello MSBuild!Welcome> Property> <Target Name="Build"> <Message Text="$(Hello)" /> Target>Project>
假设我们把这个文件保存到 D:\build.proj ,然后在命令行切换工作目录到 D:\,运行 msbuild.exe(msbuild 默认直接运行当前目录下的 *.sln 或 *.*proj 文件),则命令行将会显示详细的 build 信息,当然也包括我们的消息 'Hello MSBuild!' 。
概念
Project
Project 代表一个 Build,有属性 ToolsVersion、DefaultTargets、 InitialTargets,分别为依赖的 MSBuild 版本、默认 Build 目标,初始化目标。Property
Property 是 MSBuild 中的基本单元,可以理解为变量,我们可以在大多数地方使用它作为 Task 的参数以完成我们预期的目标。
下面的语句示范如何声明 Property:<PropertyGroup> <Name Condition="$(Name) == ''">KateName> <WorkPath>D:\WorkspaceWorkPath>PropertyGroup>
这里定义了两个 Property,我们可以使用 $(Name) 和 $(WorkPath) 来引用它们,就和前面的范例一样。
Property 可以使用 MSBuild 的 /p 参数定义,这里就使用 Condition 属性判断是否存在外部 Name,如果不存在则使用自定义的 "Kate"。Target
Target 是 Build 的基本单元,也对应 MSBuild 的 /t 参数,可用参数有 DependOnTargets,代表依赖的目标。Task
Task 即任务,Build 的过程就是若干 Task 的执行。上面的 就是 MSBuild 内置的一个 Task,Text 则是参数。
Task 可以使用 Condition 属性。
通常情况下,MSBuild 自带的 Task 并不够用,有以下 MSBuild 扩展,可以几乎不需要自己写扩展:
* MSBuild Community Tasks
* SDC Tasks Library
* MSBuild Extension PackItem
我们可以简单的把 Item 理解为 .Net 中的 Dictionary> 类型,内层的字典被称作元数据表。
<ItemGroup> <Table Include="A;B;C;D" /> <Game Include="StarCraft" /> <Game Include="WarCraft" /> <Game Include="CoderCraft" /> <Program Include="MyApp"> <Developer>ZealicDeveloper> <Timestamp>2009-01-01T11:22:33Timestamp> Program>ItemGroup>
为方便理解,我们可以用 C# 来表述上述内容。var Table = new Dictionary<string,Dictionary<string,string>{ {"A", new Dictionary<string,string>}, {"B", new Dictionary<string,string>}, {"C", new Dictionary<string,string>}, {"D", new Dictionary<string,string>}};var Game = new Dictionary<string,Dictionary<string,string>{ {"StarCraft", new Dictionary<string,string>}, {"WarCraft", new Dictionary<string,string>}, {"CoderCraft", new Dictionary<string,string>}}var Program = new Dictionary<string,Dictionary<string,string>{ {"MyApp", new Dictionary<string,string> { "Developer", "Zealic", "Timestamp", "2009-01-01T11:22:33" } }};
- MS是彻底抛弃makefile了,他新一代的build system 是MS Build.
- 打建Build System-Part 1-抛弃Build Panel
- Android Makefile and build system
- Android Makefile & build system 概述
- system build folder Makefile & config
- 今天我突然明白了sun与ms是如何和解的!
- 如果有一天,MS倒闭了.那会是什么样的景象?
- Android.mk文件语法详述 1. 概述 Android.mk文件是用来描述build system(编译系统)的,更准确的说:该文件是一个微型的GNU Makefile片段,将
- N2的build system
- 对MS的ID3DXEffect接口很是佩服a
- MS Visio虚线框粘贴出来是实线的问题解决
- Android Makefile and build system 分析
- Android Makefile and build system 分析
- Android Makefile and build system 分析
- Android MAKEFILE System (1) -- BUILD VERSION INFO
- Android Makefile and build system 分析
- Android Makefile and build system 分析
- Android Makefile and build system 分析
- 看13位CEO、创始人和高管如何提高工作效率
- YII简单的文件下载
- ERP系统容灾方案析投入产出比例与维护管理成本分析
- C++开发者都应该使用的10个C++11特性
- 笔记
- MS是彻底抛弃makefile了,他新一代的build system 是MS Build.
- SDL2.0 ubuntu complie
- ARC 与内存管理
- 添加 WinJS 控件
- Introduction to the Algebra and Geometry of Euclidean Space
- 《启示录》读书笔记系列--笔记十二
- cocos2d-x(精灵类)
- c++中常量指针(int const * p),指针常量(int * const p )
- ERP系统容灾方案典型架构