今天要花时间学学MSBuild,学习的资料是博客园上的一些关于MSBuild的文章和MSDN上对MSBuild的介绍。
MSBuild简介:
MSDN上这样描述的:Microsoft Build Engine(MSBuild)是Microsoft和Visual Studio的新的生成平台。我的理解是:MSBuild是一个工具,它生成了一个项目文件(本质上是XML)。这个项目文件使得开发人员能够描述哪些项需要生成,以及如何利用不用的平台和配置生成这些项。
接下来,我在Visual Studio 2008中创建了一个Console Application,只是在控制台里输出一行“Hello World!”。然后在这个项目里,用记事本方式打开MSBuildTest.csproj,有以下代码
这个项目文件里面就有着项目文件的一些基本要素。
项
项表示对生成系统的输入,它们根据用户为其定义的集合名称分组为项集合。这些项集合可用做任务参数,任务使用集合中包含的单个项执行生成过程的步骤。
通过创建一个元素并将其项集合的名称作为ItemGroup元素的子元素,可以在项目文件中声明项。可以看到上面的项目文件中有这样一个名为Compile的项集合,其中包含两个文件。
通过语法 @(ItemCollectionName)在整个项目文件中引用项集合。例如,可以用@(Compile)引用到上面的项集合。
属性
属性表示可用于配置生成的键/值对。通过创建元素并将属性的名称作为PropertyGroup元素的子元素来声明属性。在上面的项目文件中,就创建了值为9.0.21022并且名为ProductVersion的属性…
通过使用语法$(PropertyName)在整个项目文件中引用属性。例如,可以使用$(ProductVersion)引用上面说到的属性。
任务
任务是MSBuild项目用于执行生成操作的可执行代码的可重用单元。任务可能编译输入文件或运行外部工具,而任务一旦被创建,就可以由不同项目中的不同开发人员共享和重用。
通过创建一个元素并将任务的名称作为Target元素的子元素,可执行MSBuild项目文件中的任务。任务通常接收参数,参数作为元素的属性传递。可以使用MSBuild的项集合和属性作为参数。例如,以下代码调用MakeDir任务并向它传递一个BuildDir属性的值。
目标
目标按特定的顺序将任务组合到一起,并将项目文件的各个部分公开为过程的入口点。目标通常组合为逻辑部分以允许扩展并提高可读性。通过将生成步骤拆分为许多目标,您可以从其他目标中调用生成过程的一个部分,而不必将那部分代码复制到每一个目标中。例如,如果生成过程的多个入口点需要引用以便被生成,可以创建一个生成引用的目标并从每个必需的入口点运行此目标。
使用 Target 元素在项目文件中声明目标。例如,以下代码创建一个名为 Compile 的目标,然后此目标使用在前面的示例中声明的项集合调用 Csc 任务。
Visual Studio 集成
Visual Studio 2005 使用 MSBuild 项目文件格式来存储托管项目的生成信息。通过 Visual Studio 所添加和更改的项目设置将反映在为每个项目生成的 .*proj 文件中。Visual Studio 使用 MSBuild 的承载实例来生成托管项目,这意味着可以在 Visual Studio 中和从命令行生成托管项目(甚至可以不安装 Visual Studio),最后将得到相同结果。