我能否在使用VS2010的msbuild构建时从命令行设置平台工具集?

13

当我使用命令行从VS2010中进行msbuild构建时,是否可以在命令行中将平台工具集更改为v90(即Visual Studio 2008工具链),而无需编辑vcxproj文件?

目前,在我的构建脚本中,我正在使用以下命令行:

mysystemf("msbuild %s.vcxproj /t:rebuild /p:configuration=release,platform=%s", prjname, platform);
4个回答

27

是的,你可以在不改变vcxproj文件的情况下设置PlatformToolset。

如果你打开一个vcxproj文件,你会看到有一个PlatformToolset属性。对于Visual Studio 2012,它是v110;对于VS2010,它是v100;对于VS2008,它是v90。

你可以使用“/p:PlatformToolset=v110/v100/v90”来覆盖此属性以改变工具链。

注意:有时候,msbuild会出现错误“Unsupported platformtoolset value”,这往往是因为你没有指定“VisualStudioVersion”。


1
@KindDragon:它应该适用于VS2012/2013,你能提供更多信息吗? - Jichao
我想原因是我使用了来自VS2010的msbuild。在将msbuild路径更改后,一切都正常工作。 - KindDragon

3
平台工具集是作为配置的PropertyGroup的一部分进行配置的。
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
  <ConfigurationType>Application</ConfigurationType>
  <UseDebugLibraries>true</UseDebugLibraries>
  <CharacterSet>Unicode</CharacterSet>
  <PlatformToolset>v90</PlatformToolset>
</PropertyGroup>

如果你想通过命令行更改工具集,你需要为每个工具集添加一个配置(可以在IDE中轻松完成),然后调用该配置进行构建。

msbuild %s.vcxproj /t:rebuild /p:configuration=VC90Release,platform=%s


这对我来说是一个重要的陷阱,当我尝试使用参数强制VS2017项目使用工具集时,如果配置已经包含该值,则似乎不会受到影响... - Dani K

2

我在MSDN上找到了答案:链接:

要使用Visual C++ 9.0工具集重新生成项目,请键入以下任一命令:

msbuild myproject.vcxproj /p:PlatformToolset=v90 /t:rebuild


0

忘记提到这是一个C++项目了。ToolsVersion:3.5是用于.NET的,对吗? - sashoalm
正确的 :) 虽然我认为它适用于 Visual Studio 支持的所有语言 - ywm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接