2012-06-14 142 views
20

对于像.sln.csproj这样的扩展,默认应用程序是Microsoft Visual Studio版本选择器。我已安装了两个版本,2010 SP1和2012 RC。这个应用程序究竟如何决定启动哪个VS?“Visual Studio版本选择器”究竟如何选择VS版本?

我要说的是,它的工作原理是这样的:

  • 如果发现指定的文件,该文件版本应该使用任何暗示,那么就使用它。例如,在.sln文件顶部有这样的事情,因此版本选择可以决定:

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

  • 如果没有找到它会使用哪个版本的任何提示后来安装了(在我的情况下,我重新安装了2010 SP1后,2012年已经安装在我的PC上,现在我认为VS2010比2012年更频繁地打开,但并非100%确定)。

这是我的感觉,但确切的规则是什么?

+2

没有记录。但是您可以放心地假定它使用文件中的版本号。 –

+0

@HansPassant:我也猜到了。 – Luciano

回答

26

文件头中有一些版本信息。否则,它不可能为文件浏览器对.sln文件以数字显示不同的文档图标:

VS2008VS2010VS2012VS2013VS2015VS2017 表示对VS版本2008/2010/2012/2013的.sln文件/ 2015/2017

如果使用记事本或其他不保存UTF-8签名的文本编辑器(请参阅comment by Paul Groke)编辑.sln文件,此图标上的数字将消失。在这种情况下,版本选择器也不能选择正确的版本,并且无法从文件资源管理器中打开它。您可以在Visual Studio中专门打开它并保存.sln文件来修复它。有关此问题的更多信息,请参阅this

+5

您可以使用保留UTF-8签名的文本编辑器(也被错误地称为“字节顺序标记”)编辑.sln文件。如果UTF-8签名不存在,版本选择器将忽略该文件的内容,并使用最新版本打开它。我刚刚在我们的一个“破碎”.sln文件中试过这个 - 像魅力一样。在记事本2中打开它,以“UTF-8签名”格式重新保存=>再次运行。无需使用VS重新保存。查看接受的答案http://stackoverflow.com/questions/2804759/vslauncher-starts-wrong-version –

+1

@PaulGroke - 字节顺序标记(BOM)是'UTF-8签名'的正确名称。恰巧UTF-8只有一个字节顺序。但UTF-16有2个字节的顺序。请参阅:https://en.wikipedia.org/wiki/Byte_order_mark –

+0

@awe - 不要忘记使用'CRLF'(Windows样式行尾)而不是'LF'(Unix样式行结尾)保存文件。 –