我正在开源我创建的一些旧的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
所以我打开了项目的属性,转到Configuration Options --> General
,平台工具集确实设置为Visual Studio 2012 (v110)
。此输入是一个下拉框,未列出v110
值,而是我有两个选择:
这些分别对应VS2010和VS2008。如果我将值更改为v100并重建我没有错误,我的程序在我的Visual Studio 2010环境中运行正常。
当我在Visual Studio 2012中打开项目时,如果告诉我我有一个旧的项目文件并询问我是否要升级,我会说是,它会升级。我重建并运行以确保一切仍然有效。当我打开VS2012中的配置选项时,平台工具集被设置回`Visual Studio 2012(v110),但是点击下拉输入后会列出更多选项:
这让我有几个问题。我将把它们全部构成。尽可能多地获取信息会很好,但只有其中一个的好答案可能会解决我的问题。
如果我没有使用特定于较新版本的Visual Studio的功能,是否可以设置一个解决方案,可以在尽可能多的版本中打开和运行而无需修改(即2008年,2010年,还是2012)?如果是这样,怎么样?
如果我从Visual Studio 2012中将平台工具集设置为v90(VS2008),并且它能够构建和运行,这是否意味着它将为用户构建和运行VS2012,VS2010和VS2008?
<inherit for parent or project defaults>
选项到底有什么作用?项目默认设置为什么?这可以用来告诉Visual Studio尝试使用任何已安装的平台工具集。
除了平台工具集之外,我还可以设置其他选项以增加与其他人的开发环境的兼容性吗?
答案 0 :(得分:6)
这是一个有点棘手的情况。这里的一个潜在问题是VS2010和VS2012使用MSBuild来构建C ++项目,但VS2008将其迁移到VCBuild。您可以通过比较项目文件来查看。 VS2010 / VS2012使用.vcxproj,而VS2008使用.vcproj。
如果我没有使用特定于较新版本的Visual Studio的功能, 是否可以设置一个可以打开和运行的解决方案 尽可能多的版本没有修改(即2008年,2010年, 还是2012)?如果是这样,怎么样?
为了获得最大兼容性,您希望定位最小公分母(在本例中为vc90)。请注意,进行升级时,解决方案文件和项目文件将升级到最新版本,这可能会破坏与旧版Visual Studio的兼容性。
如果我从Visual中将Platform Toolset设置为v90(VS2008) Studio 2012,它能够构建和运行,这是否意味着它 将为VS2012,VS2010和VS2008的用户构建和运行?
不是真的,因为上面提到的.vcxproj / .vcproj冲突。
例如,我目前有一套.vcxproj文件和一个专为VS2010设计的解决方案。我使用VS2012作为我的IDE,所以当我在VS2012中打开VS2010解决方案时,我选择不升级它,只需按原样打开它。就项目文件而言,VS2012及更高版本应向后兼容VS2010。
为了在开发环境中实现最大兼容性,我的建议是使用VS2010的解决方案作为基准,目标是v100。开发人员可以使用任何比这更新的版本,它们应该优雅地协同工作。