如何强制在Visual Studio 2013中打开解决方案文件(SLN)?

105
6个回答

131

.sln文件中的一行早期代码指示了预期版本,例如:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
或:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
然而,仅当 .sln 文件的默认应用程序为“Microsoft Visual Studio版本选择器”时,它才能使用此功能。通常情况下,默认的.sln 应用程序是一个特定的版本而不是“Microsoft Visual Studio版本选择器”。在 Windows 8 中:您可以通过“继续使用”来确定默认值:

2
@UweKeim 嗯;我没有这方面的经验。对于我来说,版本选择器是默认的,每个 sln 文件加载了正确的 devenv 版本。你是否有在任何时候将这些解决方案加载到 VS2013 中?这会升级它们。 - Marc Gravell
2
好的,你的建议已经对我足够了。相比于VS 2012中那些黑暗的图标,我更喜欢现在的黄色文件夹图标! - Uwe Keim
2
@UweKeim 如果你查看sln文件,第二行会告诉它使用哪个IDE打开:# Visual Studio 2013# Visual Studio 2012 - Marc Gravell
1
@UweKeim 我想它有一个后备方案:“如果我不认识这个值,或者IDE没有安装,那么使用最近安装的IDE”。 - Marc Gravell
6
对于我来说,默认启动器已经设置为“Microsoft Visual Studio版本选择器”,但它在2012 IDE中启动使用Visual Studio 2013制作的解决方案!重新将“Microsoft Visual Studio版本选择器”应用为默认值来修复它。现在,2012在2012 IDE中打开,2013在2013 IDE中打开。(我正在使用Windows 7 64位操作系统) - Peter Flannery
显示剩余6条评论

36
请注意,您还可以使用命令行强制升级 .sln 或 .proj 文件,其中 devenv 是目标 IDE 版本:
devenv "MyProject.sln" /upgrade

示例:

"%programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" "D:\Source\MySolution.sln" /upgrade

请注意,这不会打开Visual Studio。另一种方法是在IDE中为您的解决方案文件选择“另存为”,然后覆盖或使用新名称保存解决方案。

阅读更多: http://msdn.microsoft.com/en-us/library/w15a82ay.aspx


1
因为它可脚本化且非hacky。 - CAD bloke
2
遗憾的是,这种技术并不总是会更新解决方案文件。 - Theophilus
在执行 devenv "MyProject.sln" /upgrade 命令之后,你还应该编辑 .sln 文件,参考 @Zac 的回答。 - Wei Guo

22
似乎OP已经有一个有效的答案了......但是对于我来说,问题是不同的。我有一个VS 2012解决方案(实际上有几个),想将它们转换为2013(我知道这对.sln文件来说只是微不足道的变化,但我希望能自动完成,以防有一些我不知道的秘密升级逻辑)。
所以我认为我会在VS2013中打开它,它会按预期自动升级,然后我就可以双击解决方案,在VS2013中查看它了。但是,对我来说,在VS2013中打开并没有自动升级解决方案,而且我找不到明确的方法来强制升级在VS2013中打开文件后。我可以处理解决方案,保存我的更改,并关闭VS2013,但.sln文件仍然保持不变,没有升级。
结果发现我的问题在于我如何打开解决方案......由于我习惯于右键单击文件并选择“使用”来选择我想要用来打开文件的程序,因此我经常这样做。请注意,我不是在谈论更改默认的“使用”程序,而只是使用特定的程序打开文件一次。因此,我会右键单击.sln文件......使用Visual Studio 2013打开......但是没有任何升级。
最后我想到进入VS2013,然后选择文件>打开,并选择.sln文件(这对我来说很陌生,因为我几乎从不以这种方式打开任何东西,也许你也是一样)。无论如何,这会立即升级解决方案文件。
升级后,.sln文件的第2-3行从这个变成了:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012

变成这样:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.30501.0
MinimumVisualStudioVersion = 10.0.40219.1

根据我的经验,要想将一个VS2012的.sln文件自动更新为VS2013,你必须打开VS2013并从“文件”>“打开”对话框中选择该文件。使用资源管理器强制打开.sln文件并不会调用升级逻辑(显然)。

另外一点需要注意的是,我测试了另一个解决方案,并在通过配置管理器进行更改后(这显然会"触及" .sln 文件),即使通过右键单击“使用...打开”,也成功地将VS2012升级到了VS2013。


1
这正是我想要做的。我有更新3,一个项目自动更新了,但另一个只有在我打开配置管理器时才会更改。感谢您的提示! - Erica
2
我甚至在VS 2013中打开了一个VS 2012的.sln文件,但它并没有升级。很奇怪。 - PositiveGuy
4
不是在VS 2013中打开解决方案就会触发升级,而是一些修改解决方案的操作,比如更改活动配置中的设置。 - bleater
我尝试将它从VS2013升级到VS2015,结果成功了。 - dingx

7
我有一个解决方案,该解决方案先前已成功从2010升级到2013,但仍显示.sln与2010相关联。
我测试了本线程中提供的所有方法,唯一能成功更正.sln的方法是仅打开Visual Studio 2013,然后在IDE中打开仍与2010相关联的解决方案,然后使用 [文件] > [另存为(名称).sln] 覆盖现有的.sln文件。
将.sln的文件关联设置为“Visual Studio版本选择器”没有更改,并且解决方案继续在2010中打开。
devenv (name).sln /upgrade 方法对我的.sln文件没有任何更改。
黑客攻击.sln文件的原始文本会损坏它,无法打开。

嗨,杰夫,我遇到了与你相同的情况。不过,我必须说微软决定让VS 2013不尝试升级它所接触的所有内容真是太好了,这与之前的VS版本不同!通常情况下,情况恰恰相反,我正在努力防止我的不同的VS IDE升级彼此的.proj和.sln文件 :) - Simon Brangwin
@SimonBrangwin 这是一个改进,但是如果你按照其他答案明确调用 /upgrade,你会期望它实际执行所请求的升级! - stannius
Jeff,谢谢!这是我找到的唯一升级我的VS 2013 sln以默认方式打开2015的方法。我还必须打开解决方案资源管理器并手动选择资源管理器树顶部的解决方案节点,才能在文件菜单中看到“另存为(名称)。sln”选项。 - ToastyMallows

6

为了解决这个问题,我只需要修改.sln文件中以下几行:

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010

转换为这些内容:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013

当解决方案加载器解析时,注释行将被更改。

更新:

使用另一个答案中指出的devenv命令行是更好的方法,它将安全地为您执行此操作。


4

对于想要将解决方案文件升级到Visual Studio 2015的读者来说,这可能是有用的。(我升级了一个VS 2012解决方案。)

  1. 在VS 2015中打开解决方案。
  2. 向解决方案添加一个新项目。(我添加了一个测试项目。)
  3. 删除该项目。
  4. 保存解决方案。

您可能想在此时删除已删除的项目文件夹,因为第3步没有删除它。

zumey的TCC的答案都不起作用时,这对我有效。

编辑

Metro Smurf对于一个类似的问题给出了一个类似但更简单的答案。他的步骤如下:

  1. 在VS 2015中打开解决方案
  2. 右键单击解决方案>添加>新解决方案文件夹(名称无关紧要)
  3. 保存解决方案
  4. 删除新添加的解决方案文件夹
  5. 保存解决方案

我只是重命名了一个项目,然后又恢复了原名。这样就不会创建任何文件夹。 - Andy
此解决方案也适用于VS 2017和2019。 - Theophilus

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