MSBuild基本概念

晨曦之光 发布于 2012/03/09 14:14
阅读 222
收藏 0

 本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

 

MSBuild基本概念

 

1. 介绍

 

MSBuild内建于.Net Framework 2.0中,VS Studio 2005使用的Build就是MSBuild。MSBuild类似于Java的Ant或是.NET移植版本NAnt,都允许开发人员撰写XML文件来指定Build的流程。不过MSBuild和Ant/NAnt不太一样的地方是,MSBuild比较偏向传统的Make工具,但是MSBuild改正了许多传统Make工具的缺点。
MSBuild在VS Studio中应该是作为C#/VB.NET等项目的Build工具,MSBuild允许开发人员使用XML撰写/定义Build流程,因此对于大型、复杂的项目而言,这允许开发工具借助MSBuild提供更为弹性的Build流程,更重要的是MSBuild允许开发人员拆解Build流程,让复杂项目中相同的部分可以执行相同的Build工作,或是在不同的项目中共享相同的Build流程。
MSBuild并不需要Visual Studio,没有安装Visual Studio的实验室环境是理想的。单个的生成在项目文件中组织。生成项目文件是XML文件,并有.proj扩展名。作为一个XML文件,生成项目是平台无关的、可扩展的。

参考:http://msdn.microsoft.com/zh-cn/library/ms171451(VS.80).aspx

2. 生成的组成

生成项目由项、属性和任务组成。

2.1 项Item

项是生成过程的输入,它是作为“ItemGroup”元素的子元素被创建的。多个项之间共享同一个名字并被当作是一个集合。项集在生成项目中是可寻址的,其地址的形式是“@(ItemCollectionName)”。项集主要在生成任务中被用作参数。

例如,“Compile”元素是一个标准元素,它定义了应该从生成过程中包括或排斥的源文件。“Include”属性指定一个应该包括到生成过程的文件,“Exclude”属性自然是排除文件。以下代码定义一个“Compile”集合。

  1. <ItemGroup>
  2.   <Compile Include="test1.cs"/> 
  3.   <Compile Include="test2.cs" Exclude="test3.cs"/>
  4. </ItemGroup>

2.2 属性Property

属性是在生成过程中用到的配置数据。属性代表的是单个值,不能被组合成一个集合。属性被定义为PropertyGroup元素的子元素。在项目中用$(property)引用一个属性。例如,如下代码定义一个应用程序的名字。

  1. <PropertyGroup>
  2.   <AppName>MyTest</AppName>
  3. </PropertyGroup>

2.3 任务Task

任务是MSBuild项目中的生成操作,是“Target”元素的子元素。任务可以接受参数,其作为“Task”元素的子元素,项集和属性对任务来说都是合法的参数。创建多个目标文件以对各组生成操作进行批处理。MSBuild工具可以调用不同的目标文件,例如,你可以创建发布版本和调试版本的目标文件。

任务是用托管语言写的,对任何MSBuild项目都是可用的。开发人员可以在托管代码中创作专业的任务。生成任务是实现ITask接口的类。

 

例如,如下代码执行DOS命令md和mkdir,如果mydir目录不存在则创建该目录。(DOS命令md和mkdir均可创建目录)

  1. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  2.     <Target Name="AutoMakeDir">
  3.         <Exec Command="if not exist mydir md mydir1"/>
  4.         <Exec Command="if not exist mydir mkdir mydir2"/>
  5.     </Target>
  6. </Project>

 

3. 项目文件

一个项目文件是对一个MSBuild项目概括的框架。一个MSBuild项目可以有任意数量的任务、项集和属性。这完全取决于实际项目的需要。

例如,通过执行vcbuild命令,对VC项目进行编译。本例中,VC项目名为TestMSBuild,该VC项目文件为TestMSBuild/TestMSBuild/TestMSBuild.vcproj,下面的代码所在文件与该VC项目文件在同一个文件夹。实际上对于该例,还有另外两种方法可以达到同样编译该VC项目的目的,我们另文讨论。

MSBuild命令行的语法:Msbuild switches projectfile

  1. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  2.     <PropertyGroup>
  3.         <VCBuildCommand>"D:/Program Files/Microsoft Visual Studio 8/VC/vcpackages/vcbuild.exe"</VCBuildCommand>
  4.         <VCProjectFile>"./TestMSBuild/TestMSBuild/TestMSBuild.vcproj"</VCProjectFile>
  5.         <Configuration>"Release|Win32"</Configuration>
  6.     </PropertyGroup>
  7.     
  8.     <Target Name="BuildVCProject"
  9.         <Exec Command="$(VCBuildCommand) /rebuild $(VCProjectFile) $(Configuration)" />
  10.     </Target>
  11. </Project>

原文链接:http://blog.csdn.net/livelylittlefish/article/details/3409823
加载中
返回顶部
顶部