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

相关推荐
克里斯蒂亚诺更新19 小时前
myeclipse的pojie
java·ide·myeclipse
li1670902701 天前
第十章:list
c语言·开发语言·数据结构·c++·算法·list·visual studio
Dshuishui1 天前
VSCode 环境下编译运行 C++ 项目
c++·ide·vscode
swear011 天前
【VSCODE 插件 rust-analyzer 使用】打开文件夹
ide·vscode·rust
ShawnLiaoking1 天前
Github 克隆 PyCharm,vscode
ide·pycharm·github
C182981825751 天前
AI idea 集成claude code插件
java·ide·intellij-idea
IT 行者1 天前
解决 IntelliJ IDEA 内存占用高的两个优化策略:GPU 渲染与虚拟内存配置
java·ide·intellij-idea·ai编程
Ancelin安心1 天前
西工大noj(C/C++)100题参考题解及注意事项(2024)
c语言·c++·ide·windows·vscode·算法
禹中一只鱼1 天前
【IDEA 出现 `IDE error occurred`】
java·ide·spring boot·intellij-idea
golang学习记1 天前
Zed IDE官宣新招:Git Graph 正式支持!
ide·git