MSBuild 属性

属性是可用于配置生成的名称/值对。 在将值传递给任务、计算条件,以及存储将在整个项目文件中引用的值时,可以使用属性。

在项目文件中定义和引用属性

属性的声明方式是:创建一个与属性同名的元素,将其指定为 PropertyGroup 元素的子元素。 例如,下面的 XML 创建一个名为 BuildDir 的属性,其值为 Build。

<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

在整个项目文件中,可以使用语法 $(PropertyName) 来引用属性。 例如,可以使用 $(BuildDir) 引用上例中的属性。

通过重定义属性可以更改属性值。 使用下面的 XML 可以为 BuildDir 属性指定新值:

<PropertyGroup>
    <BuildDir>Alternate</BuildDir>
</PropertyGroup>

属性按其在项目文件中出现的顺序进行计算。 必须先将旧值赋给 BuildDir,然后才能声明其新值。

保留属性

MSBuild 保留了一些属性名称,用于存储有关项目文件和 MSBuild 二进制文件的信息。 与任何其他属性一样,这些属性也通过 $ 表示法进行引用。 例如,$(MSBuildProjectFile) 返回项目文件的完整文件名,包括文件扩展名。

有关更多信息,请参见如何:引用项目文件的名称或位置MSBuild 保留属性

环境属性

可以像引用保留属性那样,在项目文件中引用环境变量。 例如,若要在项目文件中使用 PATH 环境变量,请使用 $(Path)。 如果项目中包含的某个属性定义与环境属性同名,则项目中的这个属性将重写环境变量的值。 有关更多信息,请参见如何:在生成中使用环境变量

注册表属性

可以使用下面的语法读取系统注册表值,其中 Hive 为注册表配置单元(例如 HKEY_LOCAL_MACHINE),Key 为注册表项名称,SubKey 为子项名称,Value 为子项的值。

$(registry:Hive\MyKey\MySubKey@Value)

若要获取默认子项值,请省略 Value。

$(registry:Hive\MyKey\MySubKey)

此注册表值可以用于初始化生成属性。 例如,若要创建表示 Visual Studio Web 浏览器主页的生成属性,请使用此代码:

<PropertyGroup>

<VisualStudioWebBrowserHomePage>

$(registry:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\WebBrowser@HomePage)

</VisualStudioWebBrowserHomePage>

<PropertyGroup>

全局属性

MSBuild 允许您使用 /property(或 /p)开关在命令行上设置属性。 这些全局属性值会重写在项目文件中设置的属性值。 这包括环境属性,但不包括保留属性,保留属性无法更改。

下面的示例将 Configuration 全局属性设置为 DEBUG。

msbuild.exe MyProj.proj /p:Configuration=DEBUG

还可以使用 MSBuild 任务的 Properties 特性,为多项目生成中的子项目设置或修改全局属性。 有关更多信息,请参见 MSBuild 任务

属性函数

在 .NET Framework 4 版中,可以使用属性函数来计算 MSBuild 脚本。 可以在生成脚本中读取系统时间、比较字符串、匹配正则表达式及执行多种其他操作,而无需使用 MSBuild 任务。

可以使用字符串(实例)方法来操作任何属性值,还可以调用许多系统类的静态方法。 例如,通过以下方式可以将生成属性设置为当天的日期。

<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>

有关更多信息以及属性函数的列表,请参见属性函数

在执行过程中创建属性

如果属性位于 Target 元素之外,则在生成的计算阶段为其赋值。 在随后的执行阶段中,可以如下创建或修改属性:

  • 属性可以由任何任务发出。 若要发出属性,Task 元素必须有具备 PropertyName 特性的 Output 子元素。

  • 属性可以由 CreateProperty 任务发出。 此用法已弃用。

  • 从 .NET Framework 3.5 开始,Target 元素可以包含 PropertyGroup 元素,后者可以包含属性声明。

在属性中存储 XML

属性可以包含任意 XML,这有助于将值传递给任务,或是显示日志记录信息。 下面的示例显示 ConfigTemplate 属性,该属性具有的值包含 XML 和其他属性引用。 MSBuild 使用属性引用的相应属性值来替换属性引用。 属性的赋值按其出现顺序进行。 因此,在此示例中应已定义 $(MySupportedVersion)、$(MyRequiredVersion) 和 $(MySafeMode)。

<PropertyGroup>

<ConfigTemplate>

<Configuration>

<Startup>

<SupportedRuntime

ImageVersion="$(MySupportedVersion)"

Version="$(MySupportedVersion)"/>

<RequiredRuntime

ImageVersion="$(MyRequiredVersion)

Version="$(MyRequiredVersion)"

SafeMode="$(MySafeMode)"/>

</Startup>

</Configuration>

</ConfigTemplate>

</PropertyGroup>

请参见

任务

如何:在生成中使用环境变量

如何:引用项目文件的名称或位置

如何:使用不同选项生成相同的源文件

参考

MSBuild 保留属性

Property 元素 (MSBuild)

其他资源

MSBuild 概念

!!!测试开始[MSBuild Overview]测试结束!!!