如何选择Visual Studio解决方案平台工具集以获得最大兼容性

Cor*_*oss 10 configuration compatibility cross-platform visual-studio-2010 visual-studio

背景

我正在开源一些我之前创建的旧Visual Studio应用程序.我使用我的新VS2012环境为他们创建了新的解决方案,并将项目设置为git存储库.我在Visual Studio 2012中一切正常,没有对源代码进行任何更改,我需要做的就是确保在新项目配置中链接正确的库.

我想配置这些项目,以便其他从Github下载项目的人员具有最大的兼容性.在这台机器上我安装了VS2010和最新的VS2012版本.在我为VS2012中的两个项目完成所有工作之后,我试图在VS2010中打开它们.

当我尝试构建时,我遇到了一个错误:

Specified platform toolset (v110) is not installed or invalid.
Please make sure that a supported PlatformToolset value is selected.    
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets  518
Run Code Online (Sandbox Code Playgroud)

我试过的

所以我打开了项目的属性,去Configuration Options --> General平台工具集确实设置为Visual Studio 2012 (v110).此输入是一个下拉框,v110未列出该值,而是我有两个选择:

  • V100
  • V90

它们分别对应VS2010和VS2008.如果我将值更改为v100并重建我没有错误,我的程序在我的Visual Studio 2010环境中运行正常.

当我在Visual Studio 2012中打开项目备份时,如果告诉我我有一个旧的项目文件并询问我是否要升级,我会说是,它会升级.我重建并运行以确保一切仍然有效.当我打开VS2012中的配置选项时,平台工具集被设置回`Visual Studio 2012(v110),但点击下拉输入,列出了几个选项:

  • Visual Studio 2012(v110)
  • v110_wp80
  • Visual Studio 2012 - Windows XP(v110_xp)
  • Visual Studio 2010(v100)
  • Visual Studio 2008(v90)
  • <从父项目或项目默认值继承>

我的问题

这让我有几个问题.我将把它们全部构成.尽可能多地获取信息会很好,但只有其中一个的好答案可能会解决我的问题.

  • 如果我没有使用特定于较新版本的Visual Studio的功能,是否可以设置一个解决方案,可以在尽可能多的版本(即2008年,2010年或2012年)中打开和运行而无需修改?如果是这样,怎么样?

  • 如果我从Visual Studio 2012 中将Platform Toolset设置为v90(VS2008),并且它能够构建和运行,这是否意味着它将为VS2012,VS2010和VS2008的用户构建和运行?

  • <inherit for parent or project defaults>选项到底是做什么的?项目默认设置为什么?这可以用来告诉Visual Studio尝试使用任何已安装的Platform Toolset.

  • 除了我在Visual Studio中的Platform Toolset之外还有其他选项可以增加与其他开发环境的兼容性吗?

Soo*_*Tan 6

这是一个有点棘手的情况.这里的一个潜在问题是VS2010和VS2012使用MSBuild来构建C++项目,但VS2008将其迁移到VCBuild.您可以通过比较项目文件来查看.VS2010/VS2012使用.vcxproj,而VS2008使用.vcproj.

如果我没有使用特定于较新版本的Visual Studio的功能,是否可以设置一个解决方案,可以在尽可能多的版本(即2008年,2010年或2012年)中打开和运行而无需修改?如果是这样,怎么样?

为了获得最大的兼容性,您希望定位最小公分母(在本例中为vc90).请注意,执行升级时,解决方案文件和项目文件将升级到最新版本,这可能会破坏与旧版Visual Studio的兼容性.

如果我从Visual Studio 2012中将Platform Toolset设置为v90(VS2008),并且它能够构建和运行,这是否意味着它将为VS2012,VS2010和VS2008的用户构建和运行?

不是真的,因为上面提到的.vcxproj/.vcproj冲突.

例如,我目前有一套.vcxproj文件和一个专为VS2010设计的解决方案.我使用VS2012作为我的IDE,所以当我在VS2012中打开VS2010解决方案时,我选择不升级它,只需按原样打开它.就项目文件而言,VS2012及更高版本应向后兼容VS2010.

为了在开发环境中实现最大兼容性,我的建议是使用VS2010的解决方案作为基准,目标是v100.开发人员可以使用任何比这更新的版本,它们应该优雅地协同工作.