Visual Studio 2012不会转换vs2010解决方案吗?


68

我用vs2012打开了vs2010解决方案,但由于发生了2008年到2010年的情况,因此未进行任何转换。因此,我的解决方案仍然与上面的10个标签相同。当我提出一个新的解决方案时,上面当然有11个标签。这样运行我没有任何问题,但我很好奇。有什么区别吗?如果是,如何转换成vs2012解决方案?

Answers:


32

有一些例外,但是大多数情况下,您将能够在VS2012和VS2010 SP1中打开相同的项目和解决方案文件文件。

VS2012可能会在您首次打开项目时对其进行转换,但是所做的更改(除非在链接的文档中另有说明)与VS2010向后兼容(即使用条件,仅在加载时才适用于任一版本)大多数项目类型将完全保留不变。


106

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


5
为我工作-轻松解决!此外,此答案很重要,因为它使您可以确保(默认情况下)您的同事将使用正确版本的Visual Studio打开您的解决方案。当同事将其从源代码控制中拉出时,很高兴的是,当他们双击其文件系统上的.sln文件时,它将在Visual Studio 2012中打开,而不是在2010
打开。– ClearCloud8

以防万一你不知道。仅当您安装了SP1时,此解决方法才有效。
克莱顿

1
Cleiton:我在SP1发布前几个月发布了这个“解决方案”,当时它对我有用。
RuudKok

4
@DanielSchilling:每当新转换的项目使用2012年提供的任何功能(2010年不提供)时,都会出现问题。一个示例是项目更新可以将平台工具集更改为v110,而VS2010对此并不了解,将导致生成错误错误MSB8008。
爱德华

2
我需要在sln文件中将“格式版本11.00”更改为12.00。
盖林2014年

90

不需要或建议手动编辑解决方案文件。只需在VS2012中打开VS2010解决方案,左键单击该解决方案(在“解决方案资源管理器”的顶​​部),然后使用“文件| 另存为将覆盖原始文件。这将有效地将VS2010解决方案文件转换为VS2012解决方案文件。


6
仅当我在执行“另存为”之前先左键单击解决方案(在解决方案资源管理器的最顶部)时,这对我才有用
aaaa bbbb 2013年

2
与手动编辑解决方案文件相比,我更喜欢这样做-这是我用来解决此问题的方法。
David Hay 2014年

在VS2013中,此方法总共编辑了4行,还添加了有关最低版本的注释,这在某些系统上可能很方便。我推荐这个。
d11 2014年

1
不能相信这么容易,因为我的解决方案是一个巨大的项目,并且不停地尝试了几天,所以我不想做一些愚蠢的事情,而这可能会危及解决方案的完整性。谢谢2Toad!
风暴

6

关于Visual Studio 2012兼容性

如果您在带有Service Pack 1(SP1)的Visual Studio 2010中创建了资产,则其中的许多资产将在Visual Studio 2012中加载并运行,而无需您执行任何其他操作。

即使在Visual Studio 2012中打开这些资产后,许多资产也将在Visual Studio 2010 SP1中再次打开而没有任何问题。


6

对于C ++项目,这有所不同,因为2012编译器(VC11)仅用于显式2012年的项目,而不用于VS 2012中打开的2010年项目。VC11编译器提供了一些C ++ 11改进,但不适用于VS11。 VC10(有关摘要,请参见此SO答案),包括:

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

如果您在第一次提示时拒绝更新,则可以稍后通过打开“项目”菜单并选择“更新VC ++项目... ”来更新项目。 [在菜单选项顶部]

来自MSDN的“如何:将Visual C ++项目升级到Visual Studio 2012
(此页面通过@Joachim的MSDN链接链接,但是我想在SO上找到答案,因为许多其他答案建议使用手动解决方法,而不是VS 2012特征)


很好,但是该选项有时会随机消失,尤其是在同时具有C ++ / CLI和C#项目的解决方案中。
威尔伯特2014年

2

就我而言,我有一些Visual Source Safe的东西(我的项目是使用Visual Studio 2003/2005创建的,是的,非常老!)

手动删除VSS内容后,转换成功。PS:我知道这与VS2010有关,但也许这对其他人有帮助。


1

您可以通过以下操作将项目从VS2010转换为VS2012:

  1. 通过在解决方案资源管理器中右键单击您的解决方案,然后选择添加->现有项目...,将2010项目添加到VS2012解决方案中。

  2. 该项目将出现在解决方案中,并在其名称后附加(Visual Studio 2010)。

  3. 右键单击添加的项目,然后选择“属性”。

  4. 在“配置属性->常规”窗格中,将“平台工具集”字段中的设置更改为Visual Studio 2012(v110)

  5. 对每种配置类型重复此操作,例如Release和Debug。


1

我在搜寻特定问题的解决方案时遇到了这个问题:MSBuild无法针对从命令行(特别是通过TeamCity)调用的VS2012解决方案执行Publish目标,而该解决方案已在VS2010中开始使用:

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在VS10位置(C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Windows Azure Tools \ 2.3 \ Microsoft.WindowsAzure.targets)中寻找Azure SDK 2.3目标。原因由Sayed Ibrahim Hashimi在博客文章中解释,据我了解,归结为他们做出的一些决定,同时为解决方案文件启用了跨版本兼容性。解决方案很简单:将VisualStudioVersion属性添加到MSBuild调用中,如下所示:

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

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

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

大概您可以通过手动编辑所有这些以将10.0替换为11.0来获得相同的结果,但是这可能会破坏向后兼容性-我还没有尝试过。我也没有尝试过更新VS2013来查看问题是否仍然存在。

因此,通过回答以下问题来总结一下:是的,在进行“转换”之前(使用其他答复者提供的任何方法)存在一些差异,此后仍然存在一些差异。


0

这稍有不同,但是遵循相同的原则,以防万一它可以帮助任何人:

我正在加载一个看起来像正在加载的项目,然后一直将所有项目显示为不可用。迁移报告中没有错误。我尝试使用各种方法(包括此处的建议)多次重新加载解决方案和项目。

最后,在解决方案资源管理器中右键单击解决方案时,我找到了“解决错误”选项。VS再次经历了加载过程,并开始工作。没问题。

我不知道那段时间它做了什么不同,但是显然它有所作为。


0

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

像这样

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

Visual Studio 2012
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.