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

相关推荐
初级炼丹师(爱说实话版)10 小时前
JVM的classpath
jvm·ide
小韩博20 小时前
IDEA的简单使用
java·ide·intellij-idea
@才华有限公司21 小时前
vscode使用翻译插件分享
ide·vscode·编辑器
lichong9511 天前
【Xcode】Macos p12 证书过期时间查看
前端·ide·macos·证书·xcode·大前端·大前端++
向上的车轮1 天前
PyCharm的优秀插件有哪些特性?
ide·pycharm·dubbo
小蜗子1 天前
vscode 侧边文件夹名字体大一点
ide·vscode·编辑器
楼田莉子1 天前
C++学习:异常及其处理
开发语言·c++·学习·visual studio
Ares_xb1 天前
推广一下自己刚撸的 IDEA 插件—Bean Copy 助手
java·ide·intellij-idea
小龙报1 天前
《算法通关指南---C++编程篇(1)》
开发语言·c++·程序人生·算法·学习方法·visual studio