在Visual Studio 2010和11之间共享一个C++解决方案

15

我和我的合作伙伴通过Subversion共享一个C++解决方案。

他使用的是Visual Studio 11,而我则使用的是Visual Studio 2010。

在他第一次提交并更新后,我遇到了以下错误:

Error 31 error MSB8008:指定的平台工具集(v110)未安装或无效。请确保选择了受支持的PlatformToolset值。

此外,在头文件中,我在# include <stdio.h>上遇到了以下错误:

error: 无法打开源文件“stdio.h”

我猜测这是一个兼容性问题。我们该如何解决?


你应该使用类似CMake的工具,并为所需的VS版本生成自己的解决方案。 - relaxxx
4个回答

30
在Visual Studio 11中,有一个属性选项允许您指定平台工具集。
如果您从Visual Studio 11开始创建新项目,则默认使用Platform Toolset v110,但是您可以将其更改为v100,这是Visual Studio 2010使用的工具集。 Toolset option

当您第一次在VC++ 2012中打开现有的2010项目时,它会“贴心地”将平台工具集设置为v110。这就是我来到Stackoverflow上寻求帮助的原因——尝试弄清楚VC++ 2012如何破坏我的项目,尽管它宣传了“无缝往返”。错误消息只告诉我要指定正确的平台工具集,而没有给出任何关于如何指定以及意义的指示。当然,微软的文档是毫无用处的。但是,在DuckDuckGo.com上搜索并点击Stackoverflow的链接拯救了这一天。 - Jive Dadson
P.s. 谁知道有些往返旅行会有接缝?无论如何,“平台工具集”项目出现在 VS 2010 下,并将其设置回 v100 就可以正常工作。 - Jive Dadson
2
请注意,将其设置回v100需要安装VS2010。 - JohnW

3

在Visual Studio 11中保存的.sln和.vcxproj文件与VS2010不兼容。即使它们是兼容的,最终您会遇到一些在VS11中可编译但在VS10中无法编译的代码。

最好(也可能是唯一)的方法是同意使用完全相同的开发环境。


1
据我所知,如果您正在运行自动更新,则Microsoft已修补了VC2010,使其与VC2012使用相同的格式。我现在在VC++ 2010中看到了“平台工具集”,而我之前不记得在那里看到过它。 - Jive Dadson

0
有点晚了,但由于您正在使用源代码控制,您可以从存储库中删除项目和解决方案文件,只需共享源代码即可。显然,如果您向项目添加新模块等内容,则必须在其他解决方案中手动添加它们,但至少不必担心不兼容性问题。如果您想深入了解,可以仅使用编译器和链接器开关从命令行构建应用程序,这些开关在不同版本之间通常更兼容。最后,您可以使用另一个构建工具(除了MSBuild),该工具在各个Visual Studio版本之间保持兼容。
如果您决定删除解决方案和项目文件,则需要考虑的一件事是将原始YourApp.sln另存为YourApp.sln.2010。然后,您将拥有一些种子未来解决方案的东西,但必须从VS 2010中完成项目和解决方案的更新,并手动将文件复制到其.2010版本并进行维护。
如果SVN支持补丁,或者您愿意在外部运行quilt(或者您切换到mercurial,您可以使用MQ扩展),则可以创建补丁文件以从2010转换为2011并在同步之前删除升级补丁。

0

德雷克的解决方案对我没有起作用,因为解决方案中所有项目的属性都已正确设置为v100。然而,确实起作用的修复方法是清理构建并删除除源文件或项目文件之外的所有其他文件。我认为可能是删除projname.vcxproj.user文件修复了它,因为用户首选项中某些工具链偏好被覆盖了。


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