2012-06-14 182 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樣式行結尾)保存文件。 –