MSBuild 预留属性和已知属性

MSBuild 提供了一组预定义属性,用于存储有关项目文件和 MSBuild 二进制文件的信息。 这些属性的计算方式与其他 MSBuild 属性相同。 例如,若要使用属性 MSBuildProjectFile ,请键入 $(MSBuildProjectFile)

MSBuild 使用下表中的值预定义保留属性和已知属性。 保留属性不能重写,大多数已知属性不应在高级方案中被重写。

保留属性和已知属性

本部分中的表显示了 MSBuild 预定义属性。 表中的示例列与以下示例项目文件(假定位于 C:\Source\Repos\ConsoleApp1\ConsoleApp1)相关,并显示了在项目文件中访问这些属性时这些属性的值的示例,在调用 MSBuild 时没有特殊的命令行选项。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
</Project>
资产 保留或已知 Description Example
FrameworkSDKRoot 有名 .NET Framework 工具的根文件夹的路径。 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\
InnerBuildProperty 有名 指定定义多目标生成维度的属性名称(仅当当前生成是 图形生成时适用)。 TargetFramework
InnerBuildPropertyValues 有名 指定保存可能值 InnerBuildProperty 的属性名称(仅当当前 生成是图形生成时适用)。 TargetFrameworks
IsGraphBuild 有名 True 如果这是 图形生成,则为也就是说,该 -graphBuild 选项生效。 此选项表示 MSBuild 构造和生成项目图。 构造图形涉及标识对表单依赖项的项目引用。 生成该图涉及尝试在引用它们的项目之前生成项目引用,这不同于传统的 MSBuild 计划。
MSBuildAssemblyVersion 已预留 用于生成项目的 MSBuild 程序集的版本。 17.0
MSBuildBinPath 已预留 当前正在使用的 MSBuild 二进制文件所在的文件夹的绝对路径(例如 C:\Windows\Microsoft.Net\Framework\<versionNumber>)。 如果必须引用 MSBuild 目录中的文件,此属性非常有用。

不要在此属性中包含最终反斜杠。
C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\amd64
MSBuildDisableFeaturesFromVersion 已预留 MSBuild 和 Microsoft SDK 用于管理更改波。
MSBuildExtensionsPath 有名 .NET Framework 4 中引入:默认值 MSBuildExtensionsPathMSBuildExtensionsPath32.NET Framework 4 之间没有区别。 可以将环境变量 MSBUILDLEGACYEXTENSIONSPATH 设置为非 null 值,以启用早期版本中默认值 MSBuildExtensionsPath 的行为。

在 .NET Framework 3.5 及更早版本中,默认值 MSBuildExtensionsPath 指向 \Program Files\\Program Files (x86) 文件夹下的 MSBuild 子文件夹的路径,具体取决于当前进程的位数。 例如,对于 64 位计算机上的 32 位进程,此属性指向 \Program Files (x86) 文件夹。 对于 64 位计算机上的 64 位进程,此属性指向 \Program Files 文件夹。

不要在此属性中包含最终反斜杠。

此位置是放置自定义目标文件的有用位置。 例如,目标文件可以在 \Program Files\MSBuild\MyFiles\Northwind.targets 上安装,然后使用以下 XML 代码在项目文件中导入:

<Import Project="$(MSBuildExtensionsPath)\MyFiles\Northwind.targets"/>
C:\Program Files\Microsoft Visual Studio\2022\MSBuild
MSBuildExtensionsPath32 有名 \Program Files\Program Files (x86) 文件夹下的 MSBuild 子文件夹的路径。 路径始终指向 32 位计算机上的 32 位 \Program Files (x86) 文件夹和 64 位计算机上的 \Program Files 。” 另 MSBuildExtensionsPath 请参阅和 MSBuildExtensionsPath64

不要在此属性中包含最终反斜杠。
C:\Program Files\Microsoft Visual Studio\2022\MSBuild
MSBuildExtensionsPath64 有名 \Program Files 文件夹下的 MSBuild 子文件夹的路径。 对于 64 位计算机,此路径始终指向 \Program Files 文件夹。 对于 32 位计算机,此路径为空。 另 MSBuildExtensionsPath 请参阅和 MSBuildExtensionsPath32

不要在此属性中包含最终反斜杠。
C:\Program Files\MSBuild
MSBuildFileVersion 已预留 用于生成项目的 MSBuild 程序集的 4 部分版本。 17.4.0.46505
MSBuildFrameworkToolsPath 有名 使用尾部斜杠生成当前正在执行的 MSBuild 的 .NET Framework 工具的路径。 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\
MSBuildFrameworkToolsPath32 有名 当前执行 MSBuild 的同一框架版本的 .NET Framework 工具的 32 位版本的路径,带有尾部斜杠。 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\
MSBuildFrameworkToolsPath64 有名 当前执行 MSBuild 的同一框架版本的 .NET Framework 工具的 64 位版本的路径,带有尾部斜杠。 C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\
MSBuildInteractive 已预留 true 如果 MSBuild 以交互方式运行,则允许用户输入。 此设置由 -interactive 命令行选项控制。 false
MSBuildLastTaskResult 已预留 true 如果上一个任务完成时没有任何错误(即使存在警告),或者 false 上一个任务有错误。 通常,在任务中发生错误时,错误是该项目中发生的最后一件事。 因此,此属性的值永远不会 false,除非在这些方案中:

- 当 ContinueOnErrorTask 元素 (MSBuild) 的属性设置为 WarnAndContinue (或) 或 trueErrorAndContinue

- 当 TargetOnError 元素 (MSBuild) 作为子元素时。
true
MSBuildNodeCount 已预留 生成时使用的最大并发进程数。 这是你在命令行上为 -maxcpucount 指定的值。 如果在未指定值的情况下指定 了 -maxcpucount ,则 MSBuildNodeCount 指定计算机中的处理器数。 有关详细信息,请参阅 命令行参考并行生成多个项目 1
MSBuildOverrideTasksPath 有名 搜索 .overridetasks 文件的位置,可用于提供标准任务的自定义版本。 请参阅 MSBuild 任务

不要在路径中包含最终反斜杠。
MSBuildProgramFiles32 已预留 32 位程序文件夹的位置;例如,C:\Program Files (x86)。

不要在此属性中包含最终反斜杠。
C:\Program Files (x86)
MSBuildProjectDefaultTargets 已预留 元素属性DefaultTargets中指定的Project目标的完整列表。 例如,以下 Project 元素的 MSBuildDefaultTargets 属性值为 A;B;C

<Project DefaultTargets="A;B;C" >
Build
MSBuildProjectDirectory 已预留 项目文件所在的目录的绝对路径,例如 C:\MyCompany\MyProduct

不要在此属性中包含最终反斜杠。
C:\Source\Repos\ConsoleApp1\ConsoleApp1
MSBuildProjectDirectoryNoRoot 已预留 属性的值 MSBuildProjectDirectory ,不包括根驱动器。

不要在此属性中包含最终反斜杠。
Source\Repos\ConsoleApp1\ConsoleApp1
MSBuildProjectExtension 已预留 项目文件的文件扩展名,包括句点;例如 .proj .csproj
MSBuildProjectFile 已预留 项目文件的完整文件名,包括文件扩展名;例如 MyApp.proj ConsoleApp1.csproj
MSBuildProjectFullPath 已预留 项目文件的绝对路径和完整文件名,包括文件扩展名;例如 ,C:\MyCompany\MyProduct\MyApp.proj c:\Source\Repos\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj
MSBuildProjectName 已预留 不带文件扩展名的项目文件的文件名;例如 ,MyApp ConsoleApp1
MSBuildRuntimeType 已预留 当前正在执行的运行时的类型。 MSBuild 15 中引入。 值可能未定义(在 MSBuild 15 之前), Full 指示 MSBuild 在桌面 .NET Framework 上运行, Core 指示 MSBuild 在 .NET Core 上运行(例如,in), dotnet buildMono 指示 MSBuild 在 Mono 上运行。 Full
MSBuildStartupDirectory 已预留 调用 MSBuild 的文件夹的绝对路径。 通过使用此属性,可以在项目树中的特定点下生成所有内容,而无需在每个目录中创建 <dirs.proj> 文件。 相反,只有一个项目,例如 c:\traversal.proj,如下所示:

<Project ...> <ItemGroup> <ProjectFiles Include="$ (MSBuildStartupDirectory) **\*.csproj"/> </ItemGroup> <Target Name="build"> <MSBuild Projects="@(ProjectFiles)"/> </Target> </Project>

若要在树中的任何点生成,请键入:

msbuild c:\traversal.proj

不要在此属性中包含最终反斜杠。
c:\Source\Repos\ConsoleApp1
MSBuildThisFile 已预留 的文件名和文件扩展名部分 MSBuildThisFileFullPath ConsoleApp1.csproj
MSBuildThisFileDirectory 已预留 的目录部分 MSBuildThisFileFullPath

在路径中包含最终反斜杠。
c:\Source\Repos\ConsoleApp1\ConsoleApp1\
MSBuildThisFileDirectoryNoRoot 已预留 的目录部分 MSBuildThisFileFullPath,不包括根驱动器。

在路径中包含最终反斜杠。
Source\Repos\ConsoleApp1\ConsoleApp1\
MSBuildThisFileExtension 已预留 MSBuildThisFileFullPath文件扩展名部分 。 .csproj
MSBuildThisFileFullPath 已预留 包含正在运行的目标的项目或目标文件的绝对路径。

提示:可以在目标文件中指定相对于目标文件的相对路径,而不是相对于原始项目文件的路径。
c:\Source\Repos\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj
MSBuildThisFileName 已预留 不带文件扩展名的文件名部分 MSBuildThisFileFullPath ConsoleApp1
MSBuildToolsPath 已预留 与值 MSBuildToolsVersion关联的 MSBuild 版本的安装路径。

不要在路径中包含最终反斜杠。

无法重写此属性。
C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\amd64
MSBuildToolsPath32 有名 与值 MSBuildToolsVersion关联的 32 位 MSBuild 版本的安装路径。

不要在路径中包含最终反斜杠。

无法重写此属性。
C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin
MSBuildToolsPath64 有名 与值 MSBuildToolsVersion关联的 64 位 MSBuild 版本的安装路径。

不要在路径中包含最终反斜杠。

无法重写此属性。
C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\amd64
MSBuildToolsVersion 已预留 用于生成项目的 MSBuild 工具集的版本。

注意:MSBuild 工具集由用于生成应用程序的任务、目标和工具组成。 这些工具包括编译器,如 csc.exevbc.exe。 有关详细信息,请参阅 工具集(ToolsVersion)标准和自定义工具集配置
Current
MSBuildSDKsPath 有名 MSBuild 用于查找 SDK 的路径。 C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Sdks
MSBuildSemanticVersion 已预留 用于生成项目的 MSBuild 程序集的完整 semver 2.0 版本。 17.4.0-preview-22465-05+6033e4c95
MSBuildUserExtensionsPath 有名 此路径提供 MSBuild 安装文件夹的位置。 可以重置它以提供本地、每用户自定义项。 请参阅 “自定义本地生成”。

不要在路径中包含最终反斜杠。
MSBuildVersion 已预留 用于生成项目的 MSBuild 版本。

无法重写此属性,否则将返回错误消息 MSB4004 - The 'MSBuildVersion' property is reserved, and can't be modified.
17.4.0
MSBuildWarningsAsErrors 有名 要视为错误的警告代码列表。 MSB1234;MSB5678
MSBuildWarningsAsMessages 有名 要视为消息的警告代码列表。 MSB1234;MSB5678
MSBuildWarningsNotAsErrors 有名 警告代码列表,即使 -warnAsError 开关设置为将所有其他警告提升为错误,也不应提升为错误。 请注意,如果不是 true,则不起作用。 MSB1234;MSB5678
OS 有名 在 Windows 上,这是从主机作系统继承的。 可能的值包括“Windows_NT”和“Unix”;可以在 Windows 以外的作系统上设置为不同的值。
RoslynTargetsPath 有名 Roslyn 编译器的目标路径。 C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\Roslyn
SDK35ToolsPath 有名 .NET Framework 3.5 工具的路径。
SDK40ToolsPath 有名 .NET Framework 4.0 工具的路径。 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\
VsInstallRoot 有名 Visual Studio 安装文件夹。 C:\Program Files\Microsoft Visual Studio\2022
WindowsSDK80Path 有名 Windows 8 SDK 的路径。

特定于C++项目的属性

以下属性表示各种 MSVC 生成工具(工具集)版本和目标作系统C++ MSBuild 导入文件(如 .props.targets 文件)的路径。 这些文件夹中的文件表示C++生成基础结构,对于使用 MSBuild 生成任何C++项目至关重要。

资产 保留或已知 Description Example
AndroidTargetsPath 有名 用于 Android 版本的C++ MSBuild 导入文件的路径。 C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Microsoft\MDD\Android\V150\
iOSTargetsPath 有名 C++ iOS 版本的 MSBuild 导入文件的路径。 C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Microsoft\MDD\iOS\V150\
VCTargetsPath 有名 支持C++生成系统C++ MSBuild 文件的路径。 C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Microsoft\VC\v170\
VCTargetsPath10 有名 支持 Visual Studio 2010 工具集C++ MSBuild 文件的路径。 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\
VCTargetsPath11 有名 Visual Studio 2012 (V110) 工具集的 MSBuild 导入文件的路径。 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\
VCTargetsPath12 有名 Visual Studio 2013 (V120) 工具集的 MSBuild 导入文件的路径。 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\
VCTargetsPath14 有名 Visual Studio 2015 (V140) 工具集的 MSBuild 导入文件的路径。 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\

与 MSBuild 元素冲突的名称

除了上述名称,与 MSBuild 语言元素对应的名称不能用于用户定义的属性、项或项元数据:

  • VisualStudioProject
  • 目标
  • PropertyGroup
  • 输出
  • ItemGroup
  • UsingTask
  • ProjectExtensions
  • OnError
  • ImportGroup
  • Choose
  • When
  • 否则

另请参阅