1. 程式人生 > >探究Visual Studio生成的.vs資料夾內部結構和作用

探究Visual Studio生成的.vs資料夾內部結構和作用

https://shiyousan.com/post/636441130259624698

在某個契機的引發下,對VS解決方案中自動生成的.vs資料夾產生了興趣,以前總對這個資料夾不怎麼上心,最近正好遇到點情況來搞懂.vs目錄究竟有什麼作用。

這裡直接先將我摸索出的結果貼出來,文章後面會一一詳細說明和分析.vs目錄是用來儲存當前使用者在解決方案中的工作配置,具體包括VS關閉前最後的窗口布局、最後開啟的選項卡/操作記錄/檔案文件、某些自定義配置/開發環境、除錯斷點等這類設定資訊和狀態。這樣每當使用者關閉解決方案後再重新開啟,就能繼續之前的工作狀態。

在VS2015之前的版本,這些資訊都是散亂的儲存在解決方案根目錄下(最明顯的參照物就是.suo

檔案),現在是將這些統一放在.vs這個隱藏資料夾裡,如果沒在Windows系統中開啟檢視隱藏的檔案和資料夾,還是很容易無視的。

通常來說如果團隊有使用原始碼版本管理系統,這個資料夾都是要加入忽略規則的,畢竟沒必要同步每個人的使用習慣和當前工作進度。而且.vs目錄本身具有臨時性,就算刪除後也完全不影響解決方案的啟動和執行,反正vs也會自動重新生成,只是之前的工作配置及記錄沒有了,也就是相當於第一次開啟這個專案。


這裡先隨便新建一個ASP.NET MVC專案以作為案例(最好能先生成下),我是用VS2017新建的專案,VS2015應該也是可以,老版本VS則不會出現這個資料夾。開啟解決方案所在目錄,先檢視.vs的內部結構:

.vs目錄結構

.vs目錄下只有兩個資料夾,其中config資料夾裡面只儲存了一個applicationhost.config檔案,這個比較容易理解,就是IIS Express的配置檔案,如果專案不是ASP.NET專案則沒有這個資料夾,其他的專案型別或多或少也會有類似特定的檔案:

applicationhost.config檔案

另外一個資料夾名稱是根據當前專案的解決方案名稱來的,這裡因為是隨便新建的專案所以名稱是WebApplication1(VS中ASP.NET專案預設的命名格式),此資料夾下目前只有一個vs15資料夾,這裡要注意15是Visual Studio 2017的版本號,我們平常說的VS2017是產品名稱!這點算是老生常談的知識點了,對應的VS2015版本號為14,以此類推。也就是說如果當前解決方案有用其他版本的VS開啟,這裡就會生成對應版本的資料夾:

不同版本的所生成的資料夾

繼續檢視vs15目錄,裡面分別有.suo檔案和一個sqlite3資料夾:

vs15的子目錄截圖

.suo檔案也是老朋友了,如果不明白的朋友可以網上搜索下,可以參考下這篇文章:Visual Studio中的.suo(Solution User Options)檔案。總的來說就是記錄使用者在當前解決方案中設定的斷點、書籤之類的資訊。

最後講下sqlite3資料夾,看到名字就想起了SQLite資料庫(版本3的),資料夾裡面只有一個storage.ide檔案,也不知道是幹嘛的,網上搜索了會也沒找到什麼相關資料,只能自己鼓搗鼓搗。一開始用文字開啟後發現是亂碼,想了想雖然檔案是.ide的字尾,但說不定其實就是一個SQLite資料庫檔案,結果用SQLite資料庫開啟一看還真的是!

PS:SQLite是一個嵌入式資料庫,如果對它不熟悉還是建議到官網或網上找資料瞭解下。

先在SQLite的命令列工具中連線資料庫(storage.ide檔案),這裡我為了方便操作便將專案的storage.ide檔案直接複製到命令列工具的根目錄下。接下來查詢下資料庫中有哪些表,一共有DocumentData1,ProjectData1,SolutionData1,StringInfo1這四張表:

開啟storage.ide資料庫

PS:截圖中的.table命令是查詢當前資料庫的表,.header on命令是開啟列名稱,.mode column是設定顯示模式為列模式,這裡稍微提下,是SQLite命令列工具的語法。

先看下這4張表查詢出的資料截圖:

DocumentData1表和ProjectData1表查詢的資料截圖

StringInfo1表查詢的資料截圖

SolutionData1表的資料比較長會導致排版錯亂,特意切換了顯示模式:

SolutionData1表查詢資料截圖

貼下storage.ide裡面表的結構截圖:

四張表的結構

恩,總體上來說,除了一些blob資料型別(二進位制大物件)的欄位,其他的要麼我看不懂,要麼就是和解決方案有關的資料,就是這樣,不想繼續探索下去了,感覺已經超出我的能力範圍了:

裝完逼就跑