如何从Visual Studio外部构建VS项目时“摆脱”$(SolutionDir)

时间:2013-02-24 16:37:35

标签: visual-studio-2010 msbuild

我想从Visual Studio外部通过MSBuild构建.vcxproj。问题是.vcxproj文件中出现了很多$(SolutionDir),显然只有在加载解决方案时才能正确设置。

当我用实际的绝对路径替换$(SolutionDir)时,它可以工作。但是其他机器上的其他人正在使用相同的项目文件,因此这不是解决方案。

有没有人知道任何解决方案或黑客来解决这个问题?

3 个答案:

答案 0 :(得分:34)

您可以通过传递参数参数来设置变量:

/p:SolutionDir=path

因此,您可以创建一个构建环境并相应地执行msbuild的构建脚本,而不是编辑解决方案文件,而是将Visual Studio文件保留为开发工作。

答案 1 :(得分:8)

您可以使用相对路径。 在问题中不确定VS2010,但自VS2012以来它保证有效。 如果项目文件夹位于解决方案文件夹下,则相对路径为 .. \ 顺便说一句,这可以与前一个答案中的参数参数结合使用。

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>

答案 2 :(得分:8)

明确传递SolutionDir作为参数的解决方案对我来说是不够的。 也就是说,如果我要构建的项目具有不同构建配置的依赖项,则构建将失败,并显示This project doesn't contain the Configuration and Platform combination of <my target configuration>错误。

这是有道理的,因为我没有为依赖项指定目标配置,因此它尝试将目标配置与我建造的项目相同,这是他们没有的(在我的项目中)情况)。

由于解决方案文件包含解决方案中所有项目的构建配置(给定一些解决方案配置),我们希望利用此解决方案来解决此问题。幸运的是,msbuild允许我们构建一个解决方案并将特定的目标项目作为参数传递,这只会导致构建该项目(以及它的依赖项)。

msbuild MySolution.sln /t:MyProject