解析VS2010 MSBuild vcxproj文件

时间:2010-11-04 17:06:21

标签: c++ visual-studio-2010 parsing gcc msbuild

我目前正在开发一个控制台应用程序,它将传递一个vcxproj文件并使用GCC编译它。不幸的是,我很快就遇到了一大堆问题。

我注意到一堆目录快捷方式,例如:

VCTargetsPath
VCInstallDir
SolutionDir
PROJECTDIR
UserRootDir

等等。

MSBuild从哪里获取这些值?我假设它们是为MSBuild进程设置的环境变量(毕竟已知的环境变量以相同的方式处理,即“$(...)”)。这是一个糟糕的假设,所以我想知道我是如何得到这些的。有没有人对此有任何想法?

任何信息都将非常感激:)

3 个答案:

答案 0 :(得分:3)

MSBuild可执行文件(和从属DLL)以与处理构建文件中的任何其他属性相同的方式处理这些属性。在这种情况下,它们只是显式查找的预定义属性。

如果您真的想深入研究它,请打开Reflector中的Microsoft.Build.dll并查找Microsoft.Build.Construction.SolutionProjectGenerator.AddGlobalProperties(...)方法,以了解它如何处理一些众所周知的属性。

作为补充说明,请确保完全向下导航Import指令并使用每个Import处理属性和项值的覆盖。 Visual Studio构建中有许多属性和项目,这些属性和项目并不总是正确编译代码所必需的。

答案 1 :(得分:2)

我认为这些与Visual Studio宏绑定:MSDN

答案 2 :(得分:2)

其中一些是由文件的位置定义的

  • SolutionDir - 包含此项目的解决方案(.sln)文件的目录
  • ProjectDir - 包含项目文件的目录(.vcproj,.vcxproj)

其他由MSVC安装的位置定义

  • VCInstallDir - 安装Visual Studio的Visual C部分。即。 C:\Program Files\Microsoft Visual Studio 8\VC

依此类推,并根据你加载的内容在msbuild内部。