【笔记】MSBuild中所有与路径相关的内置属性(宏) MSBuild中所有与路径相关的内置属性宏。这些属性可以分为几大类基本覆盖了从项目、解决方案到输出目录等各个方面。 项目与文件自身路径这些属性用于获取当前项目文件自身的名称、目录和完整路径。宏 (属性)说明示例$(MSBuildProjectDirectory)项目文件所在目录的绝对路径不含末尾反斜杠C:\MyProject\MyApp$(MSBuildProjectDirectoryNoRoot)项目目录路径不包含根驱动器\MyProject\MyApp$(MSBuildProjectFile)项目文件的完整文件名含扩展名MyApp.csproj$(MSBuildProjectName)项目文件的文件名不含扩展名MyApp$(MSBuildProjectExtension)项目文件的扩展名含点号.csproj$(MSBuildProjectFullPath)项目文件的绝对路径和完整文件名C:\MyProject\MyApp\MyApp.csproj$(MSBuildStartupDirectory)调用 MSBuild 命令时所处的目录的绝对路径C:\Source$(MSBuildThisFileFullPath)当前正在执行的.targets或.props文件自身的完整路径C:\Custom\My.targets$(MSBuildThisFileDirectory)当前执行的.targets或.props文件所在的目录含末尾反斜杠C:\Custom\$(MSBuildThisFileName)当前执行的.targets或.props文件的文件名不含扩展名My$(MSBuildThisFileExtension)当前执行的.targets或.props文件的扩展名.targets️ 解决方案相关路径这些属性用于获取解决方案文件的信息。注意它们仅在 Visual Studio IDE 中生成解决方案时有效。宏 (属性)说明示例$(SolutionDir)解决方案的目录含末尾反斜杠C:\MyProject\$(SolutionFileName)解决方案的完整文件名含扩展名MySolution.sln$(SolutionName)解决方案的文件名不含扩展名MySolution$(SolutionExt)解决方案的扩展名.sln$(SolutionPath)解决方案的绝对路径和完整文件名C:\MyProject\MySolution.sln️ 输出与中间目录路径这些属性控制构建过程中文件的存放位置是定制构建流程的核心。宏 (属性)说明示例$(OutDir)最终输出文件的目录路径通常是相对于项目目录的路径含末尾反斜杠bin\Release\$(TargetDir)生成的主输出文件如.dll或.exe所在目录的绝对路径含末尾反斜杠C:\MyProject\bin\Release\$(TargetPath)主输出文件的绝对路径和完整文件名C:\MyProject\bin\Release\MyApp.exe$(TargetFileName)主输出文件的完整文件名MyApp.exe$(TargetName)主输出文件的文件名不含扩展名MyApp$(TargetExt)主输出文件的扩展名.exe$(IntDir)中间文件的目录路径通常是相对于项目目录的路径含末尾反斜杠obj\Release\$(BaseOutputPath)输出文件的基路径OutDir通常基于此生成c:\xyz\bin\$(BaseIntermediateOutputPath)中间输出文件的顶级文件夹obj\$(IntermediateOutputPath)特定配置下的完整中间输出路径obj\Debug\$(PublishDir)发布目标的输出位置默认在OutDir下bin\Release\app.publish\⚙️ 工具链与系统路径这些属性指向 MSBuild 自身、编译器和 .NET 相关文件的路径。宏 (属性)说明示例$(MSBuildBinPath)当前使用的 MSBuild二进制文件所在目录C:\Program Files\dotnet\sdk\7.0.102\$(MSBuildToolsPath)与MSBuildToolsVersion对应的MSBuild 安装路径C:\Program Files\dotnet\sdk\7.0.102\$(MSBuildExtensionsPath)MSBuild 扩展文件夹的路径C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild$(MSBuildExtensionsPath32)32位MSBuild 扩展文件夹路径C:\Program Files (x86)\Microsoft Visual Studio\...$(MSBuildExtensionsPath64)64位MSBuild 扩展文件夹路径C:\Program Files\Microsoft Visual Studio\...$(DevEnvDir)Visual Studio 的安装目录C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\$(VSInstallDir)Visual Studio 安装目录与目标工具集版本相关C:\Program Files\Microsoft Visual Studio\2022\Enterprise\$(VCInstallDir)C 工具集的安装目录C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\$(FrameworkDir).NET Framework 的安装目录C:\Windows\Microsoft.NET\Framework\v4.0.30319\$(FrameworkVersion)Visual Studio 使用的.NET Framework 版本v4.0.30319$(FrameworkSDKDir).NET Framework SDK 的安装目录C:\Program Files\Microsoft SDKs\Windows\v10.0A\ 使用示例与注意事项掌握这些属性后可以更灵活地控制构建过程。以下是一些常见用法和需要注意的细节。1. 路径组合与解析MSBuild 属性可以在任务或属性组中组合使用以构建复杂路径。!-- 示例在自定义目标中引用解决方案目录下的资源 --TargetNameCopyResourcesCopySourceFiles$(SolutionDir)Resources\icon.pngDestinationFolder$(TargetDir)//Target!-- 示例根据项目文件位置推断上级目录 --PropertyGroupRepoRoot$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), .gitignore))/RepoRoot/PropertyGroup2. 条件判断与回退某些属性如解决方案相关属性在非 Visual Studio 构建环境如命令行中可能为空使用时需做条件判断。PropertyGroup!-- 如果 SolutionDir 不存在则回退到项目上级目录 --MyBaseDirCondition$(SolutionDir) ! $(SolutionDir)/MyBaseDirMyBaseDirCondition$(SolutionDir) $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), README.md))\/MyBaseDir/PropertyGroup3. 重要注意事项末尾反斜杠部分目录属性如$(SolutionDir),$(OutDir)默认包含末尾反斜杠而另一些如$(MSBuildProjectDirectory)则不包含。拼接路径时需注意一致性建议使用$([System.IO.Path]::Combine())函数确保跨平台兼容性。环境差异性$(MSBuildExtensionsPath)等工具链路径在不同机器、不同 Visual Studio 版本或 .NET SDK 版本下会有所不同避免在项目文件中硬编码这些路径。设计时与构建时在.targets或.props文件中$(MSBuildThisFileDirectory)非常有用可以确保相对于导入文件本身定位资源不受主项目文件位置影响。4. 常用属性速查表场景推荐属性获取项目根目录$(MSBuildProjectDirectory)获取输出文件路径$(TargetPath)获取中间文件目录$(IntermediateOutputPath)在导入文件中定位资源$(MSBuildThisFileDirectory)判断是否在 Visual Studio 中构建检查$(BuildingInsideVisualStudio)是否为true通过合理运用这些路径属性可以极大地增强项目文件的可维护性和构建流程的可靠性。

相关新闻

最新新闻

三方演化博弈模型:数字营商环境优化的动态仿真与政策启示

三方演化博弈模型:数字营商环境优化的动态仿真与政策启示

简介:演化博弈论是研究有限理性主体在动态互动中策略调整过程的重要理论工具,它通过复制者动态方程描述群体策略的演化路径,为分析复杂社会经济系统提供了量化框架。该模型的核心技术价值在于能够模拟多方参与者的长期互动均衡,揭…

2026/8/28 22:20:45
迪拜零售多语言本地化,别让机翻拖垮门店业务

迪拜零售多语言本地化,别让机翻拖垮门店业务

引言迪拜作为中东核心贸易枢纽,吸引大量华人开设商超、杂货零售门店。门店普遍存在双语使用场景:本地一线员工日常操作收银前台需要阿拉伯语界面,华人企业管理者则习惯使用中文完成后台管理。在 GEO 本地化落地过程中,不少出海团队…

2026/8/28 22:20:45
【TriCore-OS】Event

【TriCore-OS】Event

文章目录1. Event 是什么1.1 核心特征1.2 基本任务 vs 扩展任务1.3 Event的4个核心API1.4 两个核心位掩码2. SetEvent2.1 SetEvent流程图2.2 SetEvent调用层级2.3 SetEvent状态切换(扩展任务)2.4 SetEvent调用栈2.5 SetEvent2.5.1 Os_Event_SetEvent2.5.…

2026/8/28 22:20:45
用Python拆解马斯克观点:全球总和生育率数据分析与预测

用Python拆解马斯克观点:全球总和生育率数据分析与预测

埃隆马斯克在公开场合提出过一个非常强硬的判断:“生育率崩溃比黑死病更致命。”这句话在社交媒体上引发了大量讨论。如果你是一名做数据分析的技术人,看到这种话的第一反应可能不是急着争论,而是想:这个判断到底能不能被数据验证…

2026/8/28 22:20:45
Python数据科学实战:全球生育率趋势分析与预测

Python数据科学实战:全球生育率趋势分析与预测

这次我们用数据科学的方式来看一个争议话题:马斯克说的“生育率崩溃比黑死病更致命”到底有没有数据支撑。先不急着争论观点,只看一个更底层的问题——全球生育率是不是真的在持续下降?下降速度有多快?未来能不能用模型预测&#…

2026/8/28 22:20:45
配件与耗材防伪:设备认证技术的另一类用法

配件与耗材防伪:设备认证技术的另一类用法

设备身份认证有个不太被关注的分支:认证的双方不是"设备和云端",而是"主机和配件"。打印机认墨盒、净水器认滤芯、电子烟主机认烟弹、电动车充电器认电池——这类场景的技术内核和物联网设备认证完全一样,但商业逻辑和实…

2026/8/28 22:15:44