68

我用 vs2012 打开了我的 vs2010 解决方案,但它没有进行任何转换,因为从 2008 年到 2010 年正在发生。所以我的解决方案仍然与上面的 10 标签相同。当我制作一个新的解决方案时,它当然有 11 个标签。我这样运行没有任何问题,但我很好奇。有什么区别吗?如果是,如何转换成 vs2012 解决方案?

4

10 回答 10

106

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

于 2012-09-13T13:02:38.940 回答
90

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

于 2013-04-02T23:23:59.000 回答
32

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

VS2012可能会在您首次打开项目时对其进行转换,但这些更改(除非在链接的文档中注明)向后兼容 VS2010(即在需要时使用条件仅在加载时适用于任一版本)尽管大多数项目类型将完全保持不变.

于 2012-08-23T15:48:46.620 回答
6

这是关于 Visual Studio 2012 兼容性的

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

许多资产也将在带有 SP1 的 Visual Studio 2010 中再次打开而不会出现任何问题,即使您在 Visual Studio 2012 中打开这些资产也是如此

于 2012-08-23T15:44:06.003 回答
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特征)

于 2013-05-22T23:02:50.463 回答
2

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

一旦我手动删除了 VSS 的东西,转换就成功了。PS:我知道这是关于 VS2010,但也许这对其他人有帮助。

于 2013-12-02T13:59:36.673 回答
1

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

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

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

  3. 右键单击添加的项目并选择属性。

  4. 在 Configuration Properties --> General 窗格中,将 Platform Toolset 字段中的设置更改为 Visual Studio 2012 (v110)

  5. 对每个配置类型重复,例如发布和调试。

于 2014-04-23T17:25:33.970 回答
1

我在谷歌搜索特定问题的解决方案时遇到了这个问题:当从命令行(特别是通过 TeamCity)调用时,MSBuild 未能针对 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 来查看问题是否仍然存在。

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

于 2014-06-06T16:24:55.293 回答
0

这略有不同,但遵循相同的思路,以防万一它对任何人有帮助:

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

最后,在解决方案资源管理器中右键单击解决方案时,我发现了一个“解决错误”选项。VS 再次经历了一个加载过程,它工作了;没问题。

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

于 2013-11-09T00:29:58.067 回答
0

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

像这样

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

视觉工作室 2012
于 2013-11-14T12:03:41.130 回答