【笔记】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通过合理运用这些路径属性可以极大地增强项目文件的可维护性和构建流程的可靠性。

相关新闻

最新新闻

什么是ActAgent:企业AI系统的持续管理者

什么是ActAgent:企业AI系统的持续管理者

ActAgent处理企业AI系统故障的常见方法 当企业AI系统出现故障时,传统的处理方式通常依赖人工排查、被动响应和事后修复,这不仅效率低下,还容易导致业务中断。ActAgent作为一款面向企业的持续运行AI执行系统,其处理AI系统故障的常…

2026/7/11 14:01:25
3个步骤彻底改造你的终端界面:electerm主题定制终极指南

3个步骤彻底改造你的终端界面:electerm主题定制终极指南

3个步骤彻底改造你的终端界面:electerm主题定制终极指南 【免费下载链接】electerm 📻Terminal/ssh/sftp/ftp/telnet/serialport/RDP/VNC/Spice client(linux, mac, win) 项目地址: https://gitcode.com/GitHub_Trending/el/electerm 你是否厌倦了…

2026/7/11 14:01:25
ECharts 5 动态排序柱状图实战:3步实现数据实时排名动画

ECharts 5 动态排序柱状图实战:3步实现数据实时排名动画

ECharts 5 动态排序柱状图:打造高交互性数据排名可视化方案在数据可视化领域,动态排序柱状图因其直观展示排名变化的特性,已成为实时监控、竞技排名和业务指标展示的热门选择。ECharts 5 引入的realtimeSort特性彻底改变了传统静态排名的呈现…

2026/7/11 14:01:25
免费解锁B站大会员4K视频:bilibili-downloader终极离线下载指南

免费解锁B站大会员4K视频:bilibili-downloader终极离线下载指南

免费解锁B站大会员4K视频:bilibili-downloader终极离线下载指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为B站…

2026/7/11 14:01:25
CellReport vs DataEase:2 款开源报表工具在复杂报表与自助 BI 场景下的核心差异

CellReport vs DataEase:2 款开源报表工具在复杂报表与自助 BI 场景下的核心差异

CellReport vs DataEase:开源报表工具在复杂报表与自助BI场景下的核心差异解析1. 工具定位与核心能力对比在数据驱动决策的时代,选择适合团队的开源报表工具成为技术负责人的关键任务。CellReport与DataEase代表了两种不同的技术路线:前者专注…

2026/7/11 14:01:25
Aria2GUI:Mac平台上终极免费下载管理器的完整指南

Aria2GUI:Mac平台上终极免费下载管理器的完整指南

Aria2GUI:Mac平台上终极免费下载管理器的完整指南 【免费下载链接】aria2gui Aria2GUI for macOS 项目地址: https://gitcode.com/gh_mirrors/ar/aria2gui 在Mac平台上寻找一款强大、免费且功能全面的下载管理器?Aria2GUI正是您需要的解决方案。作…

2026/7/11 13:56:24

月新闻