MSBuild
原文:MSBuild
属性
属性表示可用于配置生成的键/值对。 属性的声明方式是:创建一个与属性同名的元素,将其指定为 PropertyGroup 元素的子元素。 例如,下面的代码将创建一个名为BuildDir 的属性,其值为 Build。
<PropertyGroup> <BuildDir>Build</BuildDir> </PropertyGroup>
通过在元素中放置一个 Condition 属性,你可以有条件地定义一个属性。 除非条件的计算结果为 true,否则会忽略条件元素的内容。 在下面的示例中,将定义Configuration 元素(如果尚未定义)。
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
在整个项目文件中,可以使用语法 $(PropertyName) 来引用各个属性。 例如,可以使用 $(BuildDir) 和 $(Configuration) 来引用前面示例中的属性。
项
项是生成系统的输入,通常表示文件。 将根据用户定义的项名称,将项编组到各种项类型中。 这些项类型可以用作任务的参数,任务使用各个项来执行生成过程的步骤。
通过创建一个元素在项目文件中声明项,该元素的项类型的名称是 ItemGroup元素的子元素。 例如,下面的代码将创建一个名为 Compile 的项类型,其中包括两个文件。
<ItemGroup> <Compile Include = "file1.cs"/> <Compile Include = "file2.cs"/> </ItemGroup>
在整个项目文件中,可以使用语法 @(ItemType) 来引用项类型。 例如,可以使用 @(Compile) 引用示例中的项类型
在 MSBuild 中,元素和特性名称区分大小写。 但是,属性、项和元数据名称不区分大小写
可以使用通配符声明项,并且对于更高级的生成方案,项可以包含其他元数据。
任务
任务是 MSBuild 项目用于执行生成操作的可执行代码单元。 例如,任务可能编译输入文件或运行外部工具。 任务可以重用,并且可由不同项目中的不同开发人员共享。
MSBuild 包含一些可根据你的要求进行修改的常见任务。例如,用于复制文件的 Copy、用于创建目录的 MakeDir 以及用于编译 Visual C# 源代码文件的 Csc。
通过创建一个元素在 MSBuild 项目文件中执行任务,该元素的任务的名称是 Target 元素的子元素。 任务通常接受参数,参数将作为元素的特性进行传递。 MSBuild 的属性和项都可用作参数。 例如,以下代码将调用 MakeDir 任务,并将前面示例中声明的 BuildDir 属性的值传递到该任务。
<Target Name="MakeBuildDirectory"> <MakeDir Directories="$(BuildDir)" /> </Target>
目标
目标按特定的顺序将任务组合到一起,并将项目文件的各个部分公开为生成过程的入口点。 目标通常分组到各个逻辑部分中,以便提高可读性并实现扩展。 通过将生成步骤拆分为目标,你可以从其他目标中调用生成过程的一个部分,而不必将那部分代码复制到每个目标中。 例如,如果生成过程的多个入口点需要生成引用,你可以创建一个生成引用的目标,然后从所要求的每个入口点运行此目标。
目标是使用 Target 元素在项目文件中声明的。 例如,以下代码将创建一个名为 Compile 的目标,该目标随后将调用具有前面示例中声明的项列表的 Csc 任务。
<Target Name="Compile"> <Csc Sources="@(Compile)" /> </Target>
在更高级的方案中,目标可用于描述彼此之间的关系并执行依赖性分析,这样,如果目标是最新的,则可以跳过生成过程的整个部分。
生成日志
你可以将生成错误、警告和消息记录到控制台或其他输出设备。