vs項目結構解析


轉載自:https://m.fuwuqizhijia.com/jiaocheng/201705/4074677.html

當我們用VS開發一個項目的時候,首先應該清楚用VS這個IDE生成的一些文件和文件夾是什麼意思,起什麼作用,什麼場合下使用。
因爲我使用的是VS2015,就以這個爲例來進行一些說明:首先要做的是更改你的操作系統,把隱藏的文件、文件夾顯示出來,以完整的顯示VS在生成一個項目時的完整文件、文件夾結構。

1、首先看到的是.sln文件和隱藏的.suo文件(.vs/你的解決方案名/版本/.suo)Net解決方案下
.sln文件和.suo文件的解釋:

When a Web site is created, a solution file (.sln) and a hidden solution user options file (.suo) are created. By default, these files are created in the My Documents/Visual Studio 2005/Projects folder. bcoz they are not required in the deployed website. SLN ( own’s the following details): * A list of the projects that are to be loaded into Visual Studio 2005
* A list of project dependencies
* Microsoft Visual SourceSafe information
* A list of add-ins that are available SUO ( own’s the following files): * The task list
* Debugger break points and watch window settings
* Visual Studio window locations

Visual Studio採用兩種文件類型(.sln和.suo)來存儲特定於解決方案的設置,它們總稱爲解決方案文件。爲解決方案資源管理器提供顯示管理文件的圖形接口所需的信息
從而在每次繼續開發任務時,不會因開發環境而分散精力; *.sln:(Visual Studio Solution) 通過爲環境提供對項目、項目項和解決方案項在磁盤上位置的引用,可將它們組織到解決方案中。比如是生成Debug模式,還是Release模式,是通用CPU還是專用的等. ps:就是打開文件的索引,正確引導你進入環境,進入工程! *.suo: (solution user options) 解決方案用戶選項記錄所有將與解決方案建立關聯的選項,
以便在每次打開時,它都包含您所做的自定義設置。比如VS佈局,項目最後編譯的而又沒有關掉的文件(下次打開時用)
ps:大概就是保存一些與代碼本身無關的一些配置.

*.suo 是一種文件的格式。它是很重要的文件, *.suo 解決方案用戶選項,記錄所有將與解決方案建立關聯的選項,以便在每次打開時,它都包含用戶所做的自定義設置。 它儲存了用戶界面的自定義配置,包括佈局、斷點和項目最後編譯的而又沒有關掉的文件(下次打開時用)等,以便於下一次你打開Visual Studio可以恢復這些設置,因此不要隨便刪除,所以不要管它們。 其實上面英文中解釋已經很清楚了,要申明的是PDB中不帶斷點信息.   其中,VS佈局包括:監視器1234的變量列表、斷點標記及開關狀態、輸出窗口錯誤窗口等的分佈及其懸浮狀態,還有項目卸載狀態標記。
  *.suo文件偶爾會被破壞,從而在構建和編輯應用程序時出現意想不到的結果。如果Visual Studio對於每個解決方案不穩定,就應刪除.suo文件。下次打開解決方案時,Visual Studio會重建它。 總結: sln和suo文件共同組成了解決方案的記錄和配置,VS解決方案中各種配置都存在這裏,具體的每一個細節就不一一列舉,以上可以給大家一個整體的認識。
但是你需要清楚一個事實,那就是,sln和suo只是一個記錄解決方案的相關信息的,詳細的項目信息,在其他的文件中,這兩個文件只是起一個組織的作用,將各個信息凝聚在一起,從而形成一個解決方案,方便項目開發。我們也沒有必要細細的研究每一個細節,只不過在此有了這個整體上的認識,大家知道平時使用VS的基本工作記錄都存於此文件中。
所以,也不要隨意的刪掉這個你看似沒用的文件,刪掉代碼也不會丟失,但是,有時候環境配置好後,使用也比較方便,對於這兩個文件,沒必要動它。爲了減少項目文件的大小,和這兩個文件沒有關係,但是如果操作不當,會導致解決方案打不開。那麼解決辦法就只有重建項目,然後導入代碼文件了,只是會浪費一些時間而已,又要重新組織項目文件。
這兩個文件是很基本的,大小都不大,但是對於組織解決方案確實起了很大的作用,建議不要隨意手動去更改,在VS中操作後自然會對文件修改。
2、接下來應該是一個一個的項目,windows下是以一個文件夾表示一個項目。
  Form1.cs  Form1.Designer.cs  Program.cs
1. 創建 Windows 窗體項目時,默認情況下,C# 會將一個窗體添加到項目中,併爲其命名爲 Form1。表示該窗體的兩個文件稱爲 Form1.cs 和 Form1.Designer.cs。Form1.cs 中寫入的是你自己的代碼;Designer.cs 文件是C# Windows 窗體設計器自動寫入代碼的文件,這些代碼用於實現所有通過從“工具箱”中拖放控件執行的操作。 Designer.cs 文件包含將控件拖動到窗體、在“屬性”窗口中設置屬性等操作時“窗體設計器”寫入的源代碼。通常,根本不應該手動編輯此文件。
2. 一但當你自己動手修改了Designer.cs 文件, 或者是你在學習時, 拷貝了別人的Designer.cs 文件, 反正只要你的Form設值只要有一點點對不上Designer.cs 文件, C#將不會執行Designer.cs 文件. 這就導致你的提示InitializeComponent不存在,但是對應的Form1.Designer.cs中有該方法。 解決辦法是重做一個Form, 讓VS重新生成Designer.cs 文件,除非你特別熟悉Designer.cs 文件與Form的關係。 Form1.cs和Form1.Designer.cs其實是一個類,Visual Studio爲了讓我們方便管理,用partial關鍵字把窗體類給拆開了,Form1.Designer.cs存放的是窗體的佈局,
你的窗體定義了哪些控件,那些控件的名字、屬性等等,都是存放在Form1.Designer.cs裏面的,而Form1.cs則是用來存放處理方法的,
比如你的按鈕點擊事件綁定了Button_Click這個方法,就會出現在Form1.cs裏
其實在早期版本的Visual Studio裏,是沒有Form1.Designer.cs的,窗體的設計類和邏輯類全在一個文件裏。
那麼好處就顯而易見了:便於管理。讓你編程的時候能夠更加直觀。
3.Program.cs是程序入口,也就是Main函數。

3、.csproj  .resx   .cs(C Sharp Source File)
  Form1.csproj文件大家應該不會陌生,那就是C#項目文件的擴展名,它是“C Sharp Project”的縮寫。那麼它究竟是給誰用的呢?那是給開發工具用的,例如我們在熟悉不過的Visual Studio,以及大家可以沒有接觸過,但是應該都聽說過的MSBuild.exe。Visual Studio會根據csproj裏的XML定義來管理項目文件以及相關其他一些種類非常豐富的數據及操作,MSBuild也會根據csproj文件來得知編譯這個項目需要有哪些依賴,默認輸出路徑,Pre-Build和Post-Build需要哪些操作等等。Visual Studio和MSBuild都是開發工具,這就是csproj存在的唯一意義:爲“開發環境”提供信息。而到了運行環境中,根本不會有人(操作系統?)關心所謂的csproj文件——也就是“程序是哪裏來的”。   Form1.resx: (窗體資源文件)你在設計窗體時所嵌入的資源, 用來存放你的窗體資源的,比如你自定義了你的窗體的圖標,這個圖標就會出現在Form.resx裏面。
  
3.1、.vcxproj  .vcxproj.filters  .vcxproj.user
這三個都是XML類型的文件,分別是 項目信息、文獻列表、用戶設置。

4、bin文件夾
  obj文件夾 Visual Studio 編譯時,在bin 目錄下有debug 和 release 目錄。 Debug: 通常稱爲調試版本,它包含調試信息,所以要比Release 版本大很多(可能大數百K或數M),並且不進行任何優化,便於程序員調試程序。 Release: 稱爲發佈版本,不對源代碼進行調試,編譯時對應用程序的速度進行優化,使得程序在代碼大小和運行速度上都是最優的,以便於用戶很好的使用。 obj目錄用於存放在編譯過程中生成的中間臨時文件,其中也都有debug 和 release 兩個子目錄, 分別對應調試版本和發行版本。在.NET中,編譯是分模塊進行的,每個模塊的編譯結果都保存在了Obj 目錄下。最後會合併爲一個.exe 或者 .dll 文件保存到 bin 之中。 因爲每次編譯都是增量編譯,也就是隻重新編譯改變了的模塊,所以,這個Obj 目錄的作用就是保存這些小塊的編譯結果,加快編譯速度。 一、先解釋一下各個文件的作用:
.pdb文件: 程序數據庫文件(Program Database File)。默認設置下,Debug的PDB是full,保存着調試和項目狀態信息、有斷點、堆棧檢查等代碼,可以對程序的調試配置進行增量鏈接。 而Release的默認設置對PDB指定爲pdb-only,保存着程序出了什麼錯誤,以及錯誤在哪行。 .vshost.exe文件: 宿主進程文件(VS host process),是Visual Studio 2005中的一項功能,主要是爲了提高調試性能。 release時最好刪除。 .vshost.exe.manifest 文件: 是一個以.manifest爲後綴的XML文件,用於組織和描述隔離應用程序及並行組件,用於COM類、接口及庫的綁定和激活,而這些信息,以往都是存儲在註冊表中的。 Manifests也制定了組成程序集的文件及Windows類,release 時也最好刪除。   
二、不生成這些文件的方法:   
不生成.vshost.exe文件的方法   如圖,打開工程屬性的debug標籤頁,將構成選爲「Release」,去掉「Visual Studio Hosting Process有效」的勾選後保存。
不生成.pdb文件的方法   如圖,打開工程屬性的build標籤頁,將構成選爲「Release」後打開「詳細設定」。將 「輸出」中的「Debug信息」從「pdb only」變爲「none」後保存。 
      
5、Properties文件夾下
Assemblyinfo.cs  Resources.resx  Resources.Designer.cs  Settings.settings  Settings.Designer.cs   Assemblyinfo.cs:程序集信息對應於如下IDE操作     Resources.resx  Resources.Designer.cs  Settings.settings  Settings.Designer.cs   不是每個c#項目都有的…只有VS的WinForm項目模板纔會自動生成,與C#無關…   前者是項目資源的代碼文件,後者是項目設置項的代碼文件…


轉載自:http://www.jizhuomi.com/software/143.html
VS2010應用程序工程中文件的組成結構

雞啄米在上一講中爲大家演示瞭如何利用應用程序嚮導創建單文檔應用程序框架。這一節將以上一講中生成應用程序HelloWorld的文件結構爲例,講解VS2010應用程序工程中文件的組成結構。

   用應用程序嚮導生成框架程序後,我們可以在之前設置的Location下看到以解決方案名命名的文件夾,此文件夾中包含了幾個文件和一個以工程名命名的子文件夾,這個子文件夾中又包含了若干個文件和一個res文件夾,創建工程時的選項不同,工程文件夾下的文件可能也會有所不同。

   如果已經以Debug方式編譯鏈接過程序,則會在解決方案文件夾下和工程子文件夾下各有一個名爲“Debug”的文件夾,而如果是Release方式編譯則會有名爲“Release”的文件夾。這兩種編譯方式將產生兩種不同版本的可執行程序:Debug版本和Release版本。Debug版本的可執行文件中包含了用於調試的信息和代碼,而Release版本則沒有調試信息,不能進行調試,但可執行文件比較小。

   雞啄米將所有文件分爲6個部分:解決方案相關文件、工程相關文件、應用程序頭文件和源文件、資源文件、預編譯頭文件和編譯鏈接生成文件。

   1.解決方案相關文件

   解決方案相關文件包括解決方案文件夾下的.sdf文件、.sln文件、.suo文件和ipch文件夾。

   .sdf文件和ipch目錄一般佔用空間比較大,幾十兆甚至上百兆,與智能提示、錯誤提示、代碼恢復和團隊本地倉庫等相關。如果你覺得不需要則可以設置不生成它們,方法是點擊菜單欄Tools->Options,彈出Options對話框,選擇左側面板中Text Editor->C/C++->Advanced,右側列表中第一項Disable Database由False改爲True就可以了,最後關閉VS2010再刪除.sdf文件和ipch目錄以後就不會再產生了。但關閉此選項以後也會有很多不便,例如寫程序時的智能提示沒有了。

   .sln文件和.suo文件爲MFC自動生成的解決方案文件,它包含當前解決方案中的工程信息,存儲解決方案的設置。

   2.工程相關文件

   工程相關文件包括工程文件夾下的.vcxproj文件和.vcxproj.filters文件。

   .vcxproj文件是MFC生成的工程文件,它包含當前工程的設置和工程所包含的文件等信息。.vcxproj.filters文件存放工程的虛擬目錄信息,也就是在解決方案瀏覽器中的目錄結構信息。

VS2010/MFC編程入門之三(VS2010應用程序工程中文件的組成結構)

   3.應用程序頭文件和源文件

   應用程序嚮導會根據應用程序的類型(單文檔、多文檔或基於對話框的程序)自動生成一些頭文件和源文件,這些文件是工程的主體部分,用於實現主框架、文檔、視圖等。雞啄米下面分別簡單介紹下各個文件:

   HelloWorld.h:應用程序的主頭文件。主要包含由CWinAppEx類派生的CHelloWorldApp類的聲明,以及CHelloWorldApp類的全局對象theApp的聲明。

   HelloWorld.cpp:應用程序的主源文件。主要包含CHelloWorldApp類的實現,CHelloWorldApp類的全局對象theApp的定義等。

   MainFrm.h和MainFrm.cpp:通過這兩個文件從CFrameWndEx類派生出CMainFrame類,用於創建主框架、菜單欄、工具欄和狀態欄等。

   HelloWorldDoc.h和HelloWorldDoc.cpp:這兩個文件從CDocument類派生出文檔類CHelloWorldDoc,包含一些用來初始化文檔、串行化(保存和裝入)文檔和調試的成員函數。

   HelloWorldView.h和HelloWorldView.cpp:它們從CView類派生出名爲CHelloWorldView的視圖類,用來顯示和打印文檔數據,包含了一些繪圖和用於調試的成員函數。

   ClassView.h和ClassView.cpp:由CDockablePane類派生出CClassView類,用於實現應用程序界面左側面板上的Class View。

   FileView.h和FileView.cpp:由CDockablePane類派生出CFileView類,用於實現應用程序界面左側面板上的File View。

   OutputWnd.h和OutputWnd.cpp:由CDockablePane類派生出COutputWnd類,用於實現應用程序界面下側面板Output。

   PropertiesWnd.h和PropertiesWnd.cpp:由CDockablePane類派生出CPropertiesWnd類,用於實現應用程序界面右側面板Properties。

   ViewTree.h和ViewTree.cpp:由CTreeCtrl類派生出CViewTree類,用於實現出現在ClassView和FileView等中的樹視圖。

   4.資源文件

   一般我們使用MFC生成窗口程序都會有對話框、圖標、菜單等資源,應用程序嚮導會生成資源相關文件:res目錄、HelloWorld.rc文件和Resource.h文件。

   res目錄:工程文件夾下的res目錄中含有應用程序默認圖標、工具欄使用圖標等圖標文件。

   HelloWorld.rc:包含默認菜單定義、字符串表和加速鍵表,指定了默認的About對話框和應用程序默認圖標文件等。

   Resource.h:含有各種資源的ID定義。

   5.預編譯頭文件

   幾乎所有的MFC程序的文件都要包含afxwin.h等文件,如果每次都編譯一次則會大大減慢編譯速度。所以把常用的MFC頭文件都放到了stdafx.h文件中,然後由stdafx.cpp包含stdafx.h文件,編譯器對stdafx.cpp只編譯一次,並生成編譯之後的預編譯頭HelloWorld.pch,大大提高了編譯效率。

   6.編譯鏈接生成文件

   如果是Debug方式編譯,則會在解決方案文件夾和工程文件夾下都生成Debug子文件夾,而如果是Release方式編譯則生成Release子文件夾。

   工程文件夾下的Debug或Release子文件夾中包含了編譯鏈接時產生的中間文件,解決方案文件夾下的Debug或Release子文件夾中主要包含有應用程序的可執行文件。

   關於應用程序工程文件的組成結構雞啄米就先講到這了。其中包含了很多專有名詞,以後大家會慢慢熟悉的。歡迎來雞啄米博客交流。謝謝。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章