2013-02-24 61 views
20

我想通过从外部视觉Studio.The问题的MSBuild建立一个.vcxproj项目时,“摆脱” $(SolutionDir)是有很多$(SolutionDir)内的.vcxproj文件,显然只有在解决方案加载时才能正确设置。如何构建VS从外部视觉工作室

当我更换$(SolutionDir)与它的工作实际的绝对路径,问题是,其他人在其他机器上使用相同的项目文件的工作...

有谁知道任何解决方案或劈死解决这个问题?

感谢,任何帮助深表感谢。

西蒙

回答

30

你可以通过参数的参数设置变量:

/p:SolutionDir=path 

所以,而不是编辑解决方案文件,你可以创建一个构建脚本设置环境并据此执行的MSBuild ,将Visual Studio文件保留为开发工作。

6

您可以使用相对路径。 不知道VS2010的问题,但它保证了自VS2012以来的作品。 如果项目文件夹是正确的解决方案文件夹下,然后相对路径是.. \ 这的方式可以从以前的答案参数变量相结合。

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

例如,覆盖.targets时,遍历目录在TFS checkin生成时不起作用。需要绝对路径。 – Shiv 2016-12-13 03:16:58

+0

请注明这应该放在相关'* .csproj'文件的''元素中。我觉得这是你答案中缺少的重要信息。 – 2017-12-19 23:34:42

5

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

这是有道理的,因为我没有指定的依赖目标配置,因此它试图针对相同的配置项目,我要建,这是他们没有(对我来说)。

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

msbuild MySolution.sln /t:MyProject