前言
寫這篇文章的目地是為了讓更多的小伙伴對VS生成的工程有一個清晰的認識。在開發過程中,為了趕進度,並不是每個人都有學習的時間。
但如果上層項目管理人員對這些工程目錄不熟悉的話,把VS編譯的中間文件也提庫到SVN,那么其它同事在提代碼時,就會發現有N多文件被修改了,其實有些目錄及文件是沒必要進行版本控制的。
說說為什么最近會寫一些C#客戶端的文章(包括WinForm和WPF),我所在公司游戲項目的需求,需要一些小工具和游戲微端,我們是在windows下開發,自然就會想到微軟大哥的客戶端技術,自然這也是學習的好機會。
軟件環境
本文的運行環境
OS:windows 7 x64; IDE: vs2012/vs2015
示例程序:winform或wpf
.Net(C#)工程結構圖
Bin目錄
Bin 目錄用來存放編譯的結果,bin是二進制binrary的英文縮寫,因為最初C#編譯的程序文件都是二進制文件,它有Debug和Release兩個版本,分別對應的文件夾為bin/Debug和bin/Release,這個文件夾是默認的輸出路徑,我們可以通過:項目屬性—>配置屬性—>輸出路徑來修改。
比如
Obj目錄
obj是object的縮寫,用於存放編譯過程中生成的中間臨時文件。其中都有debug和release兩個子目錄,分別對應調試版本和發行版本,在.NET中,編譯是分模塊進行的,編譯整個完成后會合並為一個.DLL或.EXE保存到bin目錄下。因為每次編譯時默認都是采用增量編譯,即只重新編譯改變了的模塊,obj保存每個模塊的編譯結果,用來加快編譯速度。是否采用增量編譯,可以通過:項目屬性—>配置屬性—>高級—>增量編譯來設置。
注:下面的這些文件同時存在於Debug和Release目錄
pdb
pdb(程序數據庫)文件保存着調試和項目狀態信息,從而可以對程序的調試配置進行增量鏈接
詳細解釋
vshost.exe.manifest
什么時候生成?
build vs的解決方案會生成它
功能
這個manifest清單文件文件保存了應用程序配置的元數據,它實際上是一個xml文件。
它用於組織和描述隔離應用程序及並行組件,其內部的信息如:元素用於標識着一個唯一的程序集,和其他信息一起,他們用於COM類、接口及庫的綁定和激活,而這些信息,以往都是存儲在注冊表中的。另外,Manifests也制定了組成程序集的文件及Windows類。
清單內容
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
vshost.exe
描述
宿主進程文件。宿主進程是vs中的一項功能,能提高調試性能,支持部分信任調試並支持設計時表達式計算。
作用
宿主進程創建一個應用程序域並將調試器與應用程序關聯起來,通常執行這些任務會導致在開始調試和開始運行應用程序之間有明顯的延遲,
而通過在后台創建應用程序域和關聯調試器,並在運行應用程序之間保存應用程序域和調試器狀態,宿主進程使性能得到提高
部分信任調試及設計時表達式計算(即時窗口),部分信任在安全頁中配置
.Net Reflector結構
exe
編譯出來的可執行文件
.Net Reflector結構
vshost.exe.config
宿主進程配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
exe.config
應用程序配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
Properties目錄
Properties文件夾 定義你程序集的屬性 ,如果是控制台工程,那就只有一個 AssemblyInfo.cs 文件,AssemblyInfo.cs 用於保存程序集的信息,如名稱,版本等,這些信息一般與項目屬性面板中的數據對應,不需要手動編寫。
關於程序集歡迎瀏覽我的另一篇《C# 程序集屬性(文件的詳細信息)》
如果是Winform和WPF等其它客戶端項目,則還會包括以下文件
其它文件
*.cs 類文件。源代碼都寫在這里,主要就看這里的代碼。
*.resx 資源文件,一些資源存放在這里,一般不需要看。
*.csproj C#項目文件,用VS打開這個文件就可以直接打開這個項目,自動生成,不需要看。
*.csproj.user 是一個配置文件,自動生成的,會記錄項目生成路徑、項目啟動程序等信息。也不需要看。
*.Designer.cs 設計文件,自動生成,不需要看。
*.aspx 是網頁文件,HTML代碼寫在這里面。
*.sln
sln全稱(Visual Studio Solution 解決方案文件) 它將一個或多個項目的所有元素組織到單個的解決方案中。
通過為環境提供對項目、項目項和解決方案項在磁盤上位置的引用,將它們組織到解決方案中。
比如是生成Debug模式,還是Release模式,是通用CPU還是專用的等
重命名解決方案或項目
重命名解決方案
在“解決方案資源管理器”中右擊解決方案節點,然后從上下文菜單中選擇“重命名”。
鍵入解決方案的新名稱。
重命名項目
在“解決方案資源管理器”中右擊項目節點,然后從上下文菜單中選擇“重命名”。
鍵入解決方案的新名稱。
說明:
重命名項目不會自動重命名包含該項目的文件夾。
重命名解決方案和項目之后,可以手動命名文件夾,並在VS里重新添加項目的引用。
詳細參考:https://msdn.microsoft.com/zh-cn/library/3e92t91t(v=vs.90).aspx
版本管理
上面也介紹了各個目錄及文件的含義。那么我們在做版本管理時,就會清晰很多啦。
obj目錄設置忽略,不需要版本管理
bin目錄可以忽略也可以添加,看具體的需求,建議忽略
SVN版本管理
忽略已經版本控制的文件或目錄
如果此文件/目錄,已經提庫了,那么可以采取以下方法:
TortoiseSVN → Unversion and add to ignore list
設置完之后,父目錄的屬性會改變,把父目錄一並提交。
文檔
官網文檔:https://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/tsvn-howto-unversion.html
更多SVN忽略文件和目錄的設置:https://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/tsvn-dug-ignore.html