1. 程式人生 > >vs下目錄設定和管理

vs下目錄設定和管理

首先,解決方案和專案資料夾包含關係(c++專案):

VS解決方案和各個專案資料夾以及解決方案和各個專案對應的配置檔案包含關係,假設新建一個專案ssyy,解決方案起名fangan,注意解決方案包括專案,此時生成的最外層目錄為fangan代表整個解決方案的內容都在這個資料夾內。在這個fangan資料夾內包含有fangan.sln的解決方案配置檔案和一個ssyy資料夾,ssyy資料夾代表整個ssyy專案的所有內容都在這個資料夾內,這個資料夾內含有ssyy.vcproj的專案配置檔案和.h標頭檔案以及.cpp原始檔。如果在fangan解決方案下再建立一個新專案名為ssyy2,則會在fangan資料夾下生成一個ssyy2資料夾存放ssyy2專案的所有內容。

由上面敘述可以總結出,管理器(解決方案或專案)都會對應一個總的資料夾,這個管理器資料夾下存放本管理器的配置檔案以及子管理器。比如,解決方案是個管理器,它的資料夾下含有.sln配置檔案以及子管理器ssyy專案和子管理器ssyy2專案。

另外,預設情況下,專案屬性設定的目錄起點為專案配置檔案所在位置,實際上就是專案標頭檔案和原始檔所在位置。

補充:vs中建立預設的C#專案和建立預設的C++專案生成的目錄結構是不一樣的。如果是C#專案,則解決方案總資料夾下就只包含解決方案配置檔案sln和一個專案總資料夾(共兩個東東),而專案總資料夾下包含c#原始檔、專案配置檔案proj、一個Properties屬性資料夾、一個obj資料夾和一個bin資料夾,其中obj和bin資料夾下都包含debug和release兩個資料夾。obj資料夾下存放中間編譯結果(副檔名更加專案型別而不同),而bin資料夾下存放最終生成的結果(副檔名一般為exe或dll)。

而如果是C++專案,則解決方案總資料夾下就只包含解決方案配置檔案sln和一個專案總資料夾和一個Debug資料夾以及一個Release資料夾(共四個東東,其中Debug和Release資料夾中存放最終生成的結果exe或dll,要注意如果不使用Release生成,則不存在Release資料夾),而專案總資料夾下包含C++原始檔標頭檔案、專案配置檔案和一個Debug資料夾以及一個Release資料夾(一定要注意,此處的Debug和Release資料夾僅僅存放中間編譯結果obj,不存放exe和dll之類的東西。如果不使用Release編譯,則沒有對應的Release資料夾)。

由此可見,c#專案預設生成的檔案目錄結構更合理,且輸出的exe位於總專案資料夾內,而c++專案預設exe位於解決方案總資料夾下。另外c#更合理在,C#使用Bin目錄,在Bin目錄下包含debug和release兩個目錄,而C++不使用Bin目錄,直接使用debug和releae兩個目錄。

其次,常用專案屬性和系統配置變數關係:

         如果我們建立一個預設的vc專案ssyy,他的預設“常規“欄目中,“輸出目錄”為$(SolutionDir)$(ConfigurationName),所以除錯時會在解決方案資料夾下建立一個debug(ConfigurationName的值為debug)資料夾,並在此資料夾下生成 ssyy.lik連結器 和ssyy.exe檔案 。預設“中間目錄”為$(ConfigurationName),所以會在ssyy專案資料夾下(即ssyy.vcproj的專案配置檔案所在位置)建立一個debug資料夾,並在該資料夾下生成ssyy.obj二進位制檔案。預設“連結器”欄目下的“常規”選項下的“輸出檔案”選項為$(OutDir)\$(ProjectName).exe,其中$(OutDir)就已經在“常規”欄目的“輸出目錄”選項賦值了。【所以$(OutDir)的值是在“輸出目錄”屬性中定義的】。

        另外,經過實際測試,發現“輸出目錄”屬性只能起到對$(OutDir)系統變數賦值的作用,和“改變生成的.exe檔案存放位置”沒任何關係。也就是說,如果“輸出目錄”中設定的$(OutDir)值在C盤,而“輸出檔案”中設定輸出檔案的位置為D盤,最終生成的exe檔案會在D盤,“輸出檔案”屬性才決定輸出exe檔案的位置。

        而$(TargetDir)的值是在生成exe檔案後自動賦予值為exe檔案所在位置。所以可以說,“輸出檔案”最終決定exe檔案所在的位置,也最終決定了$(TargetDir)的值,$(TargetPath)和$(TargetDir)的行為是類似的,此不贅述。

        上面兩段說了這麼多,總結就是,預設情況下“輸出目錄”和“輸出檔案”兩個屬性對應的目錄是一樣的,這樣用著方便(當然,輸出檔案的值在輸出目錄的值的基礎上還包含有exe檔名)。如果兩個不一樣,則中間生成的連結器用的如xx.ilk和xx.pdb檔案等在輸出目錄,而最終生成的xx.exe檔案在“輸出檔案”屬性設定的目錄中。

另外,上面兩段話可以總結出,當除錯程式時,系統變數$(OutDir)的值是最先確定的,而$(TargetDir)和$(TargetPath)的值是在exe檔案生成後才確定的。也就是說系統變數$(OutDir)的值由VS專案的“輸出目錄”屬性決定,而$(TargetDir)和$(TargetPath)的值由VS專案的“輸出檔案”屬性決定。即設定了VS的“輸出目錄”屬性就相當於設定了$(OutDir)的值,“輸出目錄”是介面上的提示用於接收使用者輸入的配置資訊,然後把這個具體的配置資訊存入系統內容的變數$(OutDir)中。

其它常用的屬性還有,“除錯”欄目中的“工作目錄”項,這個屬性預設情況下是空的,但表示工作目錄是工程目錄,也就是工程配置檔案ssyy.vcproj所在目錄。工作目錄表示進行某項操作的目的目錄,會隨著OpenFileDialogSaveFileDialog等物件所確定的目錄而改變。“工作目錄”屬性作用是程式執行後唯一識別的預設目錄,即工作後只認識這個目錄,工作目錄這個名字描述的就很形象,(可以將所依賴的libdll庫檔案所在目錄設為工作目錄,但一般是把lib放在解決方案下的Lib目錄中,把dll放在解決方案下的Bin目錄中),例如程式執行過程中生成一個txt文字檔案,如果在建立檔案過程中未指定絕對路徑,只指定建立檔案的檔名,那麼這個文字檔案預設就會建立在工作目錄中,當然讀取一些配置檔案也在工作目錄中查詢,但要說明一下,生成的exe檔案跟工作目錄沒任何關係,也不會放在工作目錄中。總的來說,工作目錄就是程式執行過程中預設讀取的目錄。對於dll,如果是程式執行前就進入記憶體有點像靜態連結那樣,此時dll就可以放入exe所在的執行目錄,如果dll是執行中動態載入的一般放在工作目錄,比如外掛就放在工作目錄。即工作目錄就是執行期間唯一能識別的預設目錄,工作目錄在程式碼中用GetCurrentDirectory之類的函式獲取,具體程式碼間最下面的附1。工作目錄與執行目錄可以不同,例如一個人住在北京,但他的工作地點不一定在北京,可能在天津。

對工作目錄的補充:vs中工作目錄的設定是給除錯用的,也即你啟動除錯後,啟動一個新程序,自動把這個新程序的工作目錄設定為vs專案屬性中的工作目錄,然後新程序啟動對應的exe程式。但是如果不使用vs的除錯啟動exe,而是直接雙擊exe檔案啟動一個新程序時,會自動把這個新程序的工作目錄設定為exe檔案所在的目錄,這是和vs啟動除錯不同的地方。所以如果釋出的時候不把工作目錄內的東西拷到exe所在的目錄內,就會執行出錯,因為此時工作目錄不再是vs中設定的了,而是exe檔案所在的目錄。最後,說一下,vs中預設的vc++工程的工作目錄專案的值是空的,代表預設是vs工程所在目錄即.vcproj檔案所在目錄,c#工程預設沒測試,估計和vc的一樣。】

【同樣在除錯選項下的和工作目錄選項同一級的選項“命令”選項是設定,使用除錯時,從哪裡啟動exe檔案,因為一般生成的exe放在bin目錄下的debug或release目錄下,所以命令選項一般為“Bin\$(Configuration)\$(ProjectName).exe”,預設也是這個值,當然可以更改,但此時意味著除錯狀態下啟動的exe為“命令”選項中設定的exe檔案,而不是預設的bin目錄下的debug或release下的exe檔案了。最後說一下,上面所說的“除錯”是指vs下啟動exe,包括debug模式和release模式,不要把除錯就理解為只有debug模式。】

 “除錯”欄目中的“命令(Command)”屬性項,【這個屬性表示偵錯程式要啟動的exe檔案的全名】,包括路徑名,預設為$(TargetPath),而TargetPath就表示目標輸出檔案的全路徑名,所以一般情況下它代表的值就等於“輸出檔案”屬性代表的值。當然你也可以人為的更改“命令”屬性的值,比如更改為c:\aa.exe,而“輸出檔案”的值為c:\bb.exe,此時如果輸出檔案所在目錄沒有aa.exe的話(因連結器只生成bb.exe而根本不會生成aa.exe),偵錯程式就不能啟動aa.exe,提示找不到aa.exe。當然如果目錄中已經有aa.exe檔案(可以強制賦值一個bb.exe檔案的副本並命名為aa.exe),此時偵錯程式就可以正常除錯通過。

“連結器”欄目下的“輸入”選項下的“附加依賴項”項。此項是設定程式連結時使用的靜態庫。相當於連結已經編譯好了的“程式碼”。由此我們可以簡單的認為這些庫就相當於我們自己寫的.cpp檔案,只不過這些庫是編譯好了的.cpp而已(這裡只需要庫名稱即可,搜尋路徑在其他地方設定)。

“附加依賴性的設定”等同於在程式碼中寫“#pragma comment(lib, "庫名稱.lib") ”語句,如果使用相對路徑則如下:

#pragma comment(lib,"..\\debug\\TestLib.lib");其中的反斜槓要用雙反斜槓,因為它是程式解釋的雙引號包括的字串,需要轉義一下,要區別include,#include "..\TestVideoApplication.h"中並不是由程式解釋的字串,所以不用轉義

解決方案與專案:
從VC6之後VC系列就使用解決方案(Solution)來替代原來的工作空間,用於組織和管理多個相關的專案(Project)。
文章首先演示一個虛擬的解決方案和我們期望得到的目錄結構,然後使用VC2008的專案設定功能來一步一步達到我們的需求。
虛擬解決方案:
該虛擬解決方案名為GMA,包含一個動態連結庫專案ChocolateMilk和一個應用程式專案PureMilk,需要使用一個第三方庫log4cxx(Apache log4j的C++移植版本,用於日誌輸出)。【注意這個例子中ChocolateMilk專案只生成一個dll,PureMilk只生成一個exe】
log4cxx是以動態庫的方式編譯的,所以我們需要它的3樣東西,分別是標頭檔案,匯入庫(log4cxx.lib, log4cxxd.lib)和動態連結庫(log4cxx.dll)。
假設我們期望的目錄結構如下圖:

1. GMA是解決方案目錄
2. PureMilk和ChocolateMilk是專案目錄
3. Lib目錄用於存放匯入庫或者靜態庫(包括第三方庫和自己的專案)
4. Include用於存放三方庫的標頭檔案(可以看出第三方庫所有內容分佈在Lib、Include和Bin中)
5. Bin目錄存放所有動態連結庫和執行檔,包括自己的產出和第三方庫,區分Release和Debug兩個版本。另外,程式執行過程中需要外部的資料檔案和啟動時需要的配置檔案等等都可放於該目錄
6. Temp用於存放臨時生成檔案,其中Compile存放編譯器編譯時生成的obj檔案,Link存放連結器的輸出檔案。

7.PureMilk和ChocoliteMilk兩個專案的標頭檔案和原始檔位置不要動,任然在各自的專案資料夾內。
上面目錄結構清晰,一面瞭然,當我們的程式需要製作安裝包或者要打包原始碼
釋出的時候,它能夠使得我們生活變得更容易^_^
製作安裝包時我們只需將“/GMA/Bin/Release/”目錄下的所有檔案打包。
釋出和轉移原始碼的時候我們可以打包除了Temp目錄以外“/GMA/”下面的所有檔案和目錄(如果不需要執行檔,也可不包括Bin)。

我們的需求是明確的,可是VC 2008(VS2008)並不會自動為我們做好上面所有的事情。不過我們並不需要編寫複雜的編譯指令碼(makefile),只需要簡單的修改專案的預設設定即可。
我們需要VC(VS)為我們做的事情包括:
1.使用“/GMA/Temp/Compile/”作為專案編譯時使用的中間目錄
2.使用“/GMA/Temp/Link/”作為專案連結的輸出目錄
3.當專案是應用程式時,在構建結束後拷貝執行檔案到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”,當專案是動態連結庫時,除了拷貝dll到Bin,還拷貝匯入庫到“/GMA/Lib/”
4.當專案是應用程式時,除錯時執行“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”下面的執行檔案,並以“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”為工作目錄
首先看一下專案設定中可以使用的巨集,常用的有:


ConfigurationName

配置名字,通常是Debug或者Release

IntDir

編譯器使用的中間目錄,產出obj檔案

OutDir

連結器使用的輸出目錄

ProjectDir

專案目錄

ProjectName

專案名字

SolutionDir

解決方案目錄

TargetDir

目標輸出檔案所在的目錄

TargetExt

目標輸出的副檔名

TargetFileName

目標輸出檔名,包括副檔名

TargetName

目標輸出名,不包括副檔名

TargetPath

目標輸出檔案的全路徑名

下圖是某一個工程所有設定的例子:


注意:從上圖可以看出,TargetDir指目標目錄,是一個目錄。而TargetPath是目標路徑,包括具體的檔名

下面開始進行所舉例子的工程設定:

首先來設定ChocolateMilk:
1.使用“/GMA/Temp/Compile/”作為專案編譯時使用的中間目錄
2.使用“/GMA/Temp/Link/”作為專案連結的輸出目錄

注意高亮的部分,首先將配置改成All Configuration(全部配置),這樣可以讓我們同時修改Debug和Release的部分;
Output Directory(輸出目錄,連結器)欄位填入:
$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
Intermediate Directory(中間目錄,編譯器)欄位填入:
$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
3.構建結束後拷貝動態連結庫到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”,拷貝匯入庫到“/GMA/Lib/”【這是因為若不設定,此時生成的dll和lib都在上面設定的輸出目錄中】
我們通常都會在Debug版本的輸出庫後面加上字母“d”以表示這是Debug版本,在Debug配置下,修改Import Library欄位:

VC可以讓我們設定構建前後執行的指令碼程式,所以為了完成3,
我們需要寫構建後執行的指令碼:

在Command Line中填入,Debug配置下:
copy $(TargetPath)    $(SolutionDir)\Bin\$(ConfigurationName)\;
copy $(TargetDir)$(TargetName)d.lib    $(SolutionDir)\Lib\;
Release配置下:
copy $(TargetPath)    $(SolutionDir)\Bin\$(ConfigurationName)\;
copy $(TargetDir)$(TargetName).lib    $(SolutionDir)\Lib\;
之所以要分別設定是因為VC沒有表示匯入庫的巨集名字 -_-P
OK,到此為止,你就可以編譯ChocolateMilk專案試試是不是一切正常了,不過請確認拷貝的目標目錄事先建立好。

接下來我們設定應用程式專案PureMilk:
1.使用“/GMA/Temp/Compile/”作為專案編譯時使用的中間目錄
2.使用“/GMA/Temp/Link/”作為專案連結的輸出目錄
首先將配置改成All Configuration(全部配置),這樣可以讓我們同時修改Debug和Release的部分;
Output Directory(輸出目錄,連結器)欄位填入:
$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
Intermediate Directory(中間目錄,編譯器)欄位填入:
$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
3.構建結束後拷貝執行檔案到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”
在Command Line中填入,All配置下:
copy $(TargetPath)    $(SolutionDir)\Bin\$(ConfigurationName);
4.除錯時執行“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”下面的執行檔案,並以“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”為工作目錄

Command欄位填入:$(SolutionDir)\Bin\$(ConfigurationName)\$(TargetFileName)
Working Directory欄位填入:$(SolutionDir)\Bin\$(ConfigurationName)\
這樣就大功告成了,現在你就可以編譯該執行程式並進行除錯。

以vs2010為列,一些專案屬性截圖如下:

一、除錯-》命令

如上圖設定,如果專案名稱為ss,則TargetName系統變數的值就是ss,TargetExt是副檔名為exe,此時單擊除錯按鈕(vs中的那個小三角形按鈕),會起動圖中所示目錄下的ss-XX-.exe檔案。

注意:除錯欄目下的所有選項都是為了除錯服務的,如果不用除錯按鈕,這些選項就不起作用。至於VC++目錄以及C/C++欄目是給編譯器起作用的,無法是告訴編譯器在哪裡尋找標頭檔案、庫檔案之類的事情,或者設定其他一些編譯器選項,此不贅述。

二、連結器-》常規-》輸出檔案  (表示連結器生成的exe檔案放在哪以及生成的exe檔名稱)

上圖中,如果專案名稱為ss,則聯結器生成的exe為圖中所示目錄下的ss-YY-.exe檔案。一般來說這個檔案的位置和名稱要和上面所述的“命令”選項相同,以表示連結器生成的檔案和除錯時使用的檔案一樣。(注意除錯時如果沒有修改原始碼操作,單擊除錯按鈕後,為了加快除錯速度,並不會對程式重新連結,也即不會啟動連結器)

經過我做過的一些實驗證明,如果已經通過連結器生成了exe檔案,手動修改這個exe檔名,除錯時只要將上圖所示的選項的檔名也進行相應的修改,一樣可以進行除錯並啟動exe程式。

三、連結器-》輸入-》附加依賴項   (此選項是設定程式連結時使用的靜態庫。相當於連結已經編譯好了的“程式碼”。由此我們可以簡單的認為這些庫就相當於我們寫的.cpp檔案,只不過這些庫是編譯好了的.cpp而已)

最後說一下,在開發過程中,究竟怎樣來讓 Visual Studio 連結這些 lib 及 dll 檔案會比較好呢?

 因為,在除錯 Visual Studio 2008 程式時,經常有一些動態連結庫(即 dll 檔案)需要載入到工程裡,這樣才能依賴第三方庫進行程式除錯。

這些動態連結庫,往往都是測試版本或是開發中的版本,或者會有若干個版本;這個時候,如果直接把 dll 所在目錄加到 PATH 裡,則會有潛在衝突的危險;如果直接拷貝到 Visual Studio 的目錄下,假如測試工程太多,每次有新版本的動態連結庫更新時,你需要更新若干次,拷貝、貼上苦不堪言。

總體上來說,有幾種方法可以改變 Visual Studio 的環境變數設定:

  1. 直接新增到系統的 PATH 變數裡

    這個方法最簡單,也最直接,但是壞處是會影響全域性的 PATH 設定,尤其是你包含著大量測試用的 dll 時。

  2. 在 Visual Studio 全域性設定裡,把 dll 所在目錄新增到 PATH 裡:

    通過 Visual Studio 選單 ==> 工具 ==> 選項 ==> 專案和解決方案 ==> VC++目錄,在下拉框裡選擇"可執行檔案",然後把 dll 所在路徑新增進去。

  3. 直接把所有 dll 拷貝到 Visual Studio 工程目錄下,或是拷貝到生成可執行檔案的資料夾(預設情況下是 Debug 或 Release 目錄)下:

    這個方法也很簡單,但是當你有若干個工程時,你每次更新 SDK 及其 dll 檔案,你就要把所有的工程都更新,這個不符合檔案唯一性的工程性準則。

  4. 在除錯程式時,讓 Visual Studio 幫你切換當前工作目錄到 dll 相應的目錄下:

    在 Visual Studio ==> Project ==> Properties ==> Select Configuration ==> Configuration Properties ==> Debugging ==> Working directory 裡填上 dll 所在目錄,這樣當在除錯程式時,Visual Studio 會把當前工作目錄切換到這個目錄下,從而會自動讀取本目錄下的 dll 檔案。

    這個方法的優點很明顯,簡單!副作用也很明顯,在你切換了當前工作目錄後,你可能會找不到程式的配置檔案,在程式裡寫的諸如"./config.ini"全部都找不到了;另外,你要把所有的 dll 都放到這個工作目錄裡,否則一樣會提示說找不到 xxx.dll 的問題。

  5. 最後一個方法,也是我認為最好的一個方法,在 Visual Studio 工程屬性裡把一個目錄臨時新增到 PATH 環境變數裡:
    PATH=%PATH%;$(TargetDir)\DLLS
    

    這樣就可以把 $(TargetDir)\DLLS 臨時新增到該工程所屬的系統 PATH 裡。

大家可以根據專案的實際情況,靈活選用以上方法。

附1:C#獲取設定工作目錄和執行目錄程式碼

(1)獲取和設定當前工作目錄

a)          System.IO.Directory.GetCurrentDirectory()

說明:獲取應用程式的當前工作目錄的完全限定路徑。該方法是對Win32 APIGetCurrentDirectory函式的一個封裝。

例如:'"C:\Documents and Settings\Administrator\My Documents"

b)         System.Environment.CurrentDirectory  

說明:獲取或設定當前工作目錄的完全限定路徑。該屬性內部呼叫的就是System.IO.Directory.GetCurrentDirectory()方法,二者是效果是等價的。

例如:'"C:\Documents and Settings\Administrator\My Documents"

c)          System.IO.Path.GetFullPath(".")

說明:獲取指定路徑字串的絕對路徑。也可以用GetFullPath(".\"),GetFullPath(".\\")

例如:'"C:\Documents and Settings\Administrator\My Documents"

(2)獲取和設定當前執行目錄

a)          System.Windows.Forms.Application.StartupPath

說明:獲取啟動了應用程式的可執行檔案的路徑,不包括可執行檔案的名稱。常用於WinForm.

例如:'"D:\Projects\MyTest\bin"

b)         System.AppDomain.CurrentDomain.BaseDirectory

說明:獲取基目錄,它由程式集衝突解決程式用來探測程式集。返回路徑末尾帶“\

例如:'"D:\Projects\MyTest\bin\"

c)          System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase

說明:獲取或設定包含該應用程式的目錄的名稱。返回路徑末尾帶“\

例如:'"D:\Projects\MyTest\bin\"

(3)獲取和設定當前執行目錄,包括可執行檔名

a)          System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

說明:獲取模組的完整路徑。包括可執行檔案的名稱。

例如:'"D:\Projects\MyTest\bin\MyTest.exe"

b)         System.Windows.Forms.Application.ExecutablePath

說明:獲取啟動了應用程式的可執行檔案的路徑,包括可執行檔案的名稱。

例如:'"D:\Projects\MyTest\bin\MyTest.exe"

c)          System.Reflection.Assembly.GetExecutingAssembly().Location

說明:如果包含清單的已載入檔案沒有被影像複製,則獲取該檔案的基本程式碼格式的位置。

例如:'"D:\Projects\MyTest\bin\MyTest.exe"

d)         System.Reflection.Assembly.GetExecutingAssembly().CodeBase

說明:獲取最初指定的程式集的位置,例如,在物件中指定的位置。

例如:'"file:///D:/Projects/MyTest/bin/MyTest.exe"

附2:vs(主要是.Net)中常用的各種型別的檔案:

sln:解決方案檔案,為解決方案資源管理器提供顯示管理檔案的圖形介面所需的資訊。 
.csproj:專案檔案,建立應用程式所需的引用、資料連線、資料夾和檔案的資訊。 
.aspx:Web 窗體頁由兩部分組成:視覺元素(HTML、伺服器控制元件和靜態文字)和該頁的程式設計邏輯。Visual Studio 將這兩個組成部分分別儲存在一個單獨的檔案中。視覺元素在.aspx 檔案中建立。
.aspx.cs:Web 窗體頁的程式設計邏輯位於一個單獨的類檔案中,該檔案稱作程式碼隱藏類檔案(.aspx.cs)。 
.cs: 類模組程式碼檔案。業務邏輯處理層的程式碼。 
.asax:Global.asax 檔案(也叫做 ASP.NET 應用程式檔案)是一個可選的檔案,該檔案包含響應 ASP.NET 或 HTTP 模組引發的應用程式級別事件的程式碼。
.config:Web.config 檔案向它們所在的目錄和所有子目錄提供配置資訊。 
.aspx.resx/.resx:資原始檔,資源是在邏輯上由應用程式部署的任何非可執行資料。通過在資原始檔中儲存資料,無需重新編譯整個應用程式即可更改資料。 
.XSD:XML schema的一種.從DTD,XDR發展到XSD 
.pdb:PDB(程式資料庫)檔案保持著除錯和專案狀態資訊,從而可以對程式的除錯配置進行增量連結。 
.suo:解決方案使用者選項,記錄所有將與解決方案建立關聯的選項,以便在每次開啟時,它都包含您所做的自定義設定。 
.asmx:asmx 檔案包含 WebService 處理指令,並用作 XML Web services 的可定址入口點 
.vsdisco(專案發現)檔案 基於 XML 的檔案,它包含為 Web 服務提供發現資訊的資源的連結 (URL)。 
.htc:一個HTML檔案,包含指令碼和定義元件的一系列HTC特定元素.htc提供在指令碼中implement元件的機制 

.ascx 是使用者控制元件程式碼檔案
.aspx webform html指令碼檔案
.cs 是c#類檔案)
.vb 是vb類檔案)
.aspx.cs 和你的webform相關的後臺c#程式碼檔案,其實跟.cs是一樣的
.aspx.vb 和你的webform相關的後臺VB程式碼檔案,其實跟.vb是一樣的
web.config 配置檔案
.xml xml檔案

.css 樣式表文件