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 中引入:默认值 MSBuildExtensionsPath 与 MSBuildExtensionsPath32.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 build或 Mono 指示 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.exe 和 vbc.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
- 否则