Visual Studio 命令和属性的常用宏定义(macros for MSBuild commands and properties)

MSBuild 命令和属性的宏

根据Visual Studio的安装选项,Visual Studio 可以在基于 MSBuild.vcxproj Visual Studio 项目中提供数百个宏。

这些宏对应于 MSBuild属性,它们要么是默认设置的,要么是在 .props.targets 文件中,或者在项目设置中设置的。

这些宏可以帮助我们对项目进行一些增强性的配置。

例如在一个C++项目中,我们可以看到如下配置,这里就是使用了

它最后的路径是动态计算出来的

我们可以在项目"属性页"对话框中接受字符串的任意位置使用这些宏。 这些宏不区分大小写。

我们也可以点击【宏】按钮,来查看所有预计算的

什么时候使用这些宏定义

举个简单的例子来说,假设我现在创建一个C#解决方案,里面有两个项目A和B。

如果我想把B的输出路径配置到A的输出路径下:

1、如果我们使用绝对路径,那项目在移动位置时,将会导致输出路径错误

2、如果我们使用相对路径,那不可避免要向上级寻找目录,可能就会出现../../../xxx/bin/Debug这样的路径。可读性就会降低

如果我们使用MSBuild,就可以写成如下路径

复制代码
1 $(SolutionDir)A\bin\Debug\

这样不管项目路径如何改变,都可以自动计算出相应的位置。

这只是一个简单的举例,具体还需要根据项目实际场景去使用这些宏定义。

另外还需要注意的:在C#项目属性中,我们无法在界面上看到这些宏定义,但是仍然可以使用它们。

例如在一个.NET 8的WPF工程中,我们可以将当前项目输出到同一个解决方案下WpfApp17的输出路径

常见宏列表

说明
$(Configuration) 当前项目配置的名称,例如,"调试"。
$(DevEnvDir) Visual Studio 的安装目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。
$(FrameworkDir) 在其中安装了 .NET Framework 的目录。
$(FrameworkSDKDir) 在其中安装了 .NET Framework 的目录。 .NET Framework 可能已作为 Visual Studio 的一部分安装或已单独安装。
$(FrameworkVersion) Visual Studio 使用的.NET framework 版本。 结合 $(FrameworkDir),就是 Visual Studio 使用的 .NET Framework 版本的完整路径。
$(FxCopDir) fxcop.cmd 文件的路径。 fxcop.cmd 文件并未在所有 Visual Studio 版本中安装。
$(IntDir) 为中间文件指定的目录路径。 如果这是一个相对路径,中间文件将转到已追加到项目目录的这一路径。 此路径应包含尾随斜杠 (\)。 它解析为"中间目录"属性的值。 请勿使用 $(OutDir) 来定义此属性。
$(OutDir) 输出文件目录的路径。 如果这是一个相对路径,输出文件将转到已追加到项目目录中的这一路径。 此路径应包含尾随斜杠 (\)。 它解析为"输出目录"属性的值。 请勿使用 $(IntDir) 来定义此属性。
$(Platform) 当前项目平台的名称(例如"Win32")。
$(PlatformShortName) 当前体系结构的短名称,例如"x86"或"x64"。
$(ProjectDir) 项目的目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。
$(ProjectExt) 项目的文件扩展名。 文件扩展名之前包括"."。
$(ProjectFileName) 项目的文件名称(定义为基名称 + 文件扩展名)。
$(ProjectName) 项目的基名称。
$(ProjectPath) 项目的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。
$(PublishDir) 发布目标的输出位置;包括尾随反斜杠 (\)。 默认为 $(OutDir)app.publish\ 文件夹。
$(RemoteMachine) 设置为"调试"属性页上 Remote Machine 属性的值。 有关详细信息,请参阅更改 C/C++ 调试配置的项目设置
$(RootNameSpace) 包含应用程序的命名空间(如果存在)。
$(SolutionDir) 解决方案的目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。 仅当在 IDE 中生成解决方案时定义。
$(SolutionExt) 解决方案的文件扩展名。 文件扩展名之前包括"."。 仅当在 IDE 中生成解决方案时定义。
$(SolutionFileName) 解决方案的文件名称(定义为基名称 + 文件扩展名)。 仅当在 IDE 中生成解决方案时定义。
$(SolutionName) 解决方案的基名称。 仅当在 IDE 中生成解决方案时定义。
$(SolutionPath) 解决方案的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。 仅当在 IDE 中生成解决方案时定义。
$(TargetDir) 生成的主输出文件的目录(定义为驱动器 + 路径);包括尾随反斜杠 (\)。
$(TargetExt) 生成的主输出文件的文件扩展名。 文件扩展名之前包括"."。
$(TargetFileName) 生成的主输出文件的文件名称(定义为基名称 + 文件扩展名)。
$(TargetName) 生成的主输出文件的基名称。
$(TargetPath) 生成的主输出文件的绝对路径名称(定义为驱动器 + 路径 + 基名称 + 文件扩展名)。
$(VCInstallDir) 包含 Visual Studio 安装的 C++ 内容的目录。 此属性包含目标 Microsoft C++ (MSVC) 工具集的版本,它可能与主机 Visual Studio 不同。 例如,当使用 $(PlatformToolset) = v140 进行生成时,$(VCInstallDir) 包含 Visual Studio 2015 安装路径。
$(VSInstallDir) 在其中安装了 Visual Studio 的目录。 此属性包含目标 Visual Studio 工具集的版本,它可能与主机 Visual Studio 不同。 例如,当使用 $(PlatformToolset) = v110 进行生成时,$(VSInstallDir) 包含 Visual Studio 2012 安装路径。
$(WebDeployPath) 从 Web 部署根到项目输出位置的相对路径。
$(WebDeployRoot) <localhost> 位置的绝对路径。 例如 c:\inetpub\wwwroot

参考资料:

https://learn.microsoft.com/en-us/cpp/build/reference/common-macros-for-build-commands-and-properties?view=msvc-170

相关推荐
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
vscode快捷键配置
ide·vscode·编辑器
檀越剑指大厂2 小时前
【Idea系列】换行处理
java·ide·intellij-idea
QAQ小菜鸟2 小时前
二、Visual Studio 2026如何创建C语言项目
visual studio
风为你而吹2 小时前
mac m3上使用vscode + esp-idf开发esp32
ide·vscode·macos
小灰灰搞电子15 小时前
Qt 开发环境选择Qt Creator、Visual Studio还是 VS Code?
开发语言·qt·visual studio
jugt19 小时前
将JetBrains系软件(PhpStorm、IntelliJIdea、WebStorm)缓存目录迁移到其它盘
ide·phpstorm
whm277719 小时前
Visual Basic Data控件
windows·visual studio
游荡的小狼1 天前
Visual Studio Community 2022 安装
visual studio
bkspiderx1 天前
Visual Studio 2026安装常见问题与解决方案
ide·visual studio·vs2026·vc2026安装
bkspiderx1 天前
Visual Studio 2026 安装指南(2025年最新状态+通用流程)
ide·安装·visual studio·vs2026