尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【笔记】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通过合理运用这些路径属性可以极大地增强项目文件的可维护性和构建流程的可靠性。
RELATED

相关推荐

3步革命:用Playnite构建你的终极游戏库统一中心

3步革命:用Playnite构建你的终极游戏库统一中心

3步革命:用Playnite构建你的终极游戏库统一中心 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址: https://g…

📅 2026/8/31 15:15:42
Android 7系统网络(三)Native层(上)—netd守护进程与CommandListener

Android 7系统网络(三)Native层(上)—netd守护进程与CommandListener

系列目录:第一篇:全景图与调用链路概览 | 第二篇:内核层—netfilter/iptables与路由策略 | 第三篇:Native层(上)—netd守护进程与CommandListener | 第四篇:Native层(下)—netd Controller详解 | 第五篇:Fr…

📅 2026/8/31 15:22:19
Windows 10音频延迟终极优化:如何用REAL工具获得零延迟音频体验

Windows 10音频延迟终极优化:如何用REAL工具获得零延迟音频体验

Windows 10音频延迟终极优化:如何用REAL工具获得零延迟音频体验 【免费下载链接】REAL Reduce audio latency on Windows 10 项目地址: https://gitcode.com/gh_mirrors/re/REAL 你是否在玩游戏时感觉枪声总是比画面慢半拍?或者在进行音乐制作时被…

📅 2026/9/8 5:22:58
MORE NEWS

更多资讯

📰

MySQL主从复制配置与高可用架构实践指南

1. MySQL主从配置:高可用架构的基石实践上周刚帮一家电商平台解决了数据库单点故障引发的服务中断问题,核心方案就是MySQL主从复制。这种架构不仅能实现故障快速切换,还能分担主库压力,是每个DBA必须掌握的生存技能。今天我就用最…

📰

数据产品商业化:五种盈利模式与实施策略

1. 数据产品商业化的本质与价值数据产品商业化本质上是通过对原始数据进行加工、分析、封装,形成可交易、可复用的数据资产或数据服务的过程。这个过程将无形的数据资源转化为具有明确市场价值的产品形态,就像把原油提炼成汽油、柴油等不同标号的燃料产品…

📰

e2e端到端测试实战指南:从Profile配置到稳定性排障

做软件测试的同行看到"e2e"三个字母应该都不会陌生,全称end-to-end,端到端测试。但你真让我说清楚它解决什么、怎么落地、容易在哪儿翻车,我能聊很久。这篇就把我最近一次e2e改造的真实经历摊开讲,从测试范围划定、工具…

📰

深度学习性能建模:原理、实现与工程实践

1. 项目概述:深度学习性能建模的核心价值在深度学习项目落地过程中,我们常常遇到这样的困境:训练好的模型在实际部署时性能不达标,或者资源消耗远超预期。性能建模技术正是为了解决这类问题而生——它能在模型开发早期预测运行时表…

📰

Seedance 2.0:AI视频生成与物理引擎的融合技术解析

1. Seedance 2.0技术解析:当AI视频生成遇上物理引擎Seedance 2.0最核心的突破在于将传统视频生成技术与物理引擎深度融合。我们测试发现,其物理模拟精度达到毫米级,比如模拟布料飘落时,能准确计算每平方厘米面料受到的风阻系数。这…

📰

多模态高层融合技术与Transformer在机器人感知中的应用

1. 多模态高层融合的核心价值与挑战在机器人感知与决策系统中,多模态高层融合(High-Level Fusion)正成为突破性能瓶颈的关键技术。与早期特征级融合不同,高层融合直接在语义层面整合视觉、语音、触觉等多源信息,就像人…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬