Visual Studio 2012无法转换vs2010解决方案?

67

我用vs2012打开了我的vs2010解决方案,但它并没有像从2008升级到2010那样进行任何转换。因此,我的解决方案仍然保持10的标签。当我创建一个新的解决方案时,它当然会有11的标签。我没有遇到任何问题,但我很好奇。有什么区别吗?如果有,如何将其转换为vs2012解决方案?

10个回答

106

我成功地“转换”了解决方案文件,将包含“#Visual Studio 2010”的行更改为“.SLN文件中的“#Visual Studio 2012”。


5
对我有用-易修复!此答案还很重要,因为它可以确保(默认情况下)您的同事将使用正确版本的Visual Studio打开您的解决方案。当同事从源代码控制中拉取时,当他们在文件系统上双击.sln文件时,它会在Visual Studio 2012中打开,而不是在2010中。 - ClearCloud8
1
Cleiton:我在SP1发布前几个月发布了这个“解决方案”,当时它对我很有效。 - RuudKok
我还没有使用过2012,所以请原谅我的无知,但这有什么意义呢?如果你的同事使用2010打开解决方案会在什么情况下成为问题?我并不是要挑战你 - 我只是真的不知道。 - Daniel Schilling
4
在转换新项目时,如果该项目使用了2012中存在但2010中不存在的任何功能,则可能会出现问题。例如,项目更新可能会更改平台工具集为v110,而VS2010不知道这一点,将导致构建错误MSB8008。请注意保持原文意思不变,使翻译通俗易懂。 - Edward
2
我需要在sln文件中将“格式版本11.00”更改为12.00。 - gerleim
显示剩余2条评论

90

手动编辑解决方案文件不是必要的,也不被推荐。只需在VS2012中打开VS2010解决方案,在解决方案资源管理器的最顶层左键单击解决方案,然后使用 文件 | 另存为 覆盖原始文件即可。这将有效地将VS2010解决方案文件转换为VS2012解决方案文件。


6
只有在我先左键单击解决方案(在解决方案资源管理器的最顶部)之后,我才能成功执行“另存为”操作。 - aaaa bbbb
2
我更喜欢这种方式,而不是手动编辑解决方案文件——以前我就是这样处理的。 - David Hay
在VS2013中,此方法总共编辑了4行,并添加了有关最低版本的注释,在某些系统上可能很方便。我建议这样做。 - d11
1
难以置信这是如此简单,我已经断断续续地尝试了几天,因为我的解决方案是一个庞大的项目,我不想做一些愚蠢的事情,可能会危及解决方案的完整性。感谢2Toad! - Storm

32
有一些例外情况,但大部分时候您将能够在VS2012和VS2010 SP1中打开相同的项目和解决方案文件。VS2012在首次打开项目时可能会转换项目,但更改(除了链接文档中注明的内容)与VS2010向后兼容(即在加载时使用条件语句仅适用于某个版本)。大多数项目类型都将完全不受影响。

6

这篇文章是关于Visual Studio 2012的兼容性问题。

如果你在Visual Studio 2010 SP1中创建了你的资源,那么很多资源在不需要任何额外操作的情况下就能够在Visual Studio 2012中加载和运行。

即使你在Visual Studio 2012中打开了这些资源,很多资源也可以在Visual Studio 2010 SP1中再次无问题地打开。


6
对于C++项目而言,这很重要,因为2012编译器(VC11)只会在明确使用2012的项目中使用,而不会用于在VS 2012中打开的2010项目。一些C++11改进只能使用VC11编译器而不是VC10(请参见此SO答案以获取摘要),包括:
  • 范围for循环
  • 新标准库头文件(原子、互斥、线程等)
  • 较小的标准库容器大小
  • (当2012年11月CTP交付给VS 2012时将有更多内容

为了从VS 2010项目转换到VS2012,无需手动编辑解决方案文件或“另存为”现有项目。相反:

如果您在第一次提示时拒绝更新,您可以通过打开项目菜单并选择更新VC++项目...(在菜单选项顶部)稍后更新项目。来自MSDN的“如何:将Visual C++项目升级到Visual Studio 2012”(此页面链接自@Joachim的MSDN链接,但我想在SO上提供答案,因为许多其他答案建议手动解决方法而不是使用VS 2012功能)。

太好了,但是那个选项有时候似乎会随机消失,特别是在同时包含C++/CLI和C#项目的解决方案中。 - Wilbert

2
在我的情况下,我有一些Visual Source Safe的东西(我的项目是用Visual Studio 2003/2005创建的,是的,非常古老!)。
一旦我手动移除了VSS的东西,转换就成功了。 PS:我知道这是关于VS2010的,但也许这能帮助其他人。

1

我在谷歌上搜索解决特定问题的方法时遇到了这个问题:当通过命令行(特别是通过TeamCity)对起源于VS2010的VS2012解决方案执行发布目标时,MSBuild无法执行。

error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Windows Azure Tools\2.3\Microsoft.WindowsAzure.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

MSBuild在寻找Azure SDK 2.3目标时位于VS10位置 (C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Windows Azure Tools\2.3\Microsoft.WindowsAzure.targets)。原因由Sayed Ibrahim Hashimi在博客文章中解释,我理解的是,这归结于他们在启用解决方案文件的跨版本兼容性时做出的一些决策。 解决方案很简单:在MSBuild调用中添加VisualStudioVersion属性,类似于以下内容:

msbuild.exe MyAwesomeWeb.sln /p:VisualStudioVersion=11.0

实际上,这将覆盖每个csproj文件中的以下内容:

<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>

假设你手动编辑所有这些内容,将10.0替换为11.0,可能会破坏向后兼容性 - 我还没有尝试过。我也没有尝试更新到VS2013,看看问题是否仍然存在。
因此,回答这个问题:是的,在进行“转换”之前有一些差异,并且在之后仍然存在一些差异。

1
您可以按照以下步骤将项目从VS2010转换为VS2012:
1.通过在“解决方案资源管理器”中右键单击解决方案,选择“添加”->“现有项目”,将2010项目添加至VS2012解决方案中。
2.项目会出现在解决方案中,并在其名称后面添加(Visual Studio 2010)。
3.右键单击项目并选择“属性”。
4.在“配置属性”->“常规”窗格中,将“平台工具集”字段的设置更改为“Visual Studio 2012(v110)”。
5.对于每个配置类型(例如发布和调试),重复执行上述步骤。

0

这很简单,只需要编辑.sol文件并将版本更改为11

就像这样

Microsoft Visual Studio解决方案文件,格式版本12.00

Visual Studio 2012

0

这个稍微有点不同,但是沿着同样的方向,如果有帮助的话:

我正在加载一个项目,看起来它正在加载,然后一直显示所有项目都不可用。迁移报告上没有错误。我尝试了多次重新加载解决方案和项目,使用了各种方法,包括这里的建议。

最后,我在“解决错误”选项中找到了一个选项,在解决方案资源管理器中右键单击解决方案。VS再次进行了加载过程,它成功了;没有问题。

我不知道它那次做了什么不同的事情,但显然它有所不同。


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