bin,app_code,app_data 等文件夾的作用

1.  Bin文件夾

 

Bin文件夾包含應用程序所需的,用於控件、組件或者需要引用的任何其他代碼的可部署程序集。該目錄中存在的任何.dll文  件將自動地鏈接到應用程序。如果在該文件夾中留有不用的或過期的文件,則可能出現“二義性引用(ambiguous  reference)”異常的風險。換句話說,如果兩個不同的程序集定義相同的類(相同的命名空間和名稱),則ASP.NET運行庫不能決定應該使用哪一  個程序集,從而拋出一個異常。在開發時,當我們重新命名一個項目或一個程序集的名稱時,這是常見的錯誤。爲了避免這種錯誤,一定不要在該文件夾中保留任何  不必要的程序集,或者至少要從配置文件的<assemblies>節中刪除如下代碼行:

<add  assembly="*"  />

在表1.10所列的所有文件夾中,只有Bin可以被ASP.NET  1.x應用程序識別。該文件夾是強制性的。

2.  App_Browser文件夾

該可選的文件夾包含.browser文件。.browser文件描述瀏覽器(不管是移動設備瀏覽器,還是臺式機瀏覽器)的特  徵和功能。ASP.NET在安裝路徑下的Config/Browser文件夾中安裝了大量.browser文件,這些文件供所有應用程序共享。我們只是把  當前應用程序特有的瀏覽器文件放在App_Browser文件夾下。.browser文件的內容即時動態地進行編譯,以便向ASP.NET運行庫提供最新  的瀏覽器信息。

讓我們簡單談談擁有一個自定義的.browser文件可能有幫助的場景。設想應用程序使用了一個在某個瀏覽器下不能有效呈現的控件。在指定的瀏覽器中顯示宿主頁面時,可以編寫一個.browser文件,迫使ASP.NET使用一個不同的適配器來生成該控件。

<browsers>

<browser  id="browserID">

<controlAdapters>

<adapter  controlType="Samples.CustomControl"

adapterType="Samples.Adapters.CustomControlAdapter"  />

</controlAdapters>

</browser>

</browsers>

假設browserID與ASP.NET識別的標準瀏覽器之一相匹配,則上文所示的.browser文件指示在指定的瀏覽器下使用CustomControlAdapter呈現CustomControl。

3.  App_Code文件夾

App_Code文件夾正好在Web應用程序根目錄下,其存儲所有應當作爲應用程序的一部分動態編譯的類文件。這些類文件自  動鏈接到應用程序,而不需要在頁面中添加任何顯式指令或聲明來創建依賴性。App_Code文件夾中放置的類文件可以包含任何可識別的ASP.NET組件  ——自定義控件、輔助類、build提供程序、業務類、自定義提供程序、HTTP處理程序等。

    注意        在開發時,對App_Code文件夾的更改會導致整個應用程序重新編譯。對於大型項目,這可能不受歡迎,而且很耗時。爲此,鼓勵大家將代碼進行模塊化處理  到不同的類庫中,按邏輯上相關的類集合進行組織。應用程序專用的輔助類大多應當放置在App_Code文件夾中。

App_Code文件夾中存放的所有類文件應當使用相同的語言。如果類文件使用兩種或多種語言編寫,則必須創建特定語言的子目錄,以包含用每種語言編寫的類。一旦根據語言組織這些類文件,就要在web.config文件中爲每個子目錄添加一個設置:

<compilation>

<codeSubDirectories>

<add  directoryName="VBFolder"  />

</codeSubDirectories>

</compilation>

重要的是,特定語言的子目錄應在web.config文件中註冊,否則,不管它們屬於哪個文件夾,App_Code文件夾下  的所有文件將被編譯成一個單獨的程序集。上述配置腳本描述了這麼一種情況,即所有的C#文件都放在App_Code文件夾的根目錄下,而把幾個  Visual  Basic  .NET類文件移入VBFolder目錄中。如果<codeSubDirectories>節中提到的目錄不存在,則會收到一個編譯錯誤提  示。

App_Code根文件夾中的文件被編譯成App_Code_xxx.dll程序集,其中xxx是隨機生成的字符序列。一個  給定子目錄中的文件將被編譯成一個名爲App_SubCode_xxx_yyy.dll的動態創建的程序集,其中xxx指示子目錄的名稱,而yyy是一個  隨機字符序列。只有在應用程序根目錄中的web.config文件中進行了設置,<codeSubDirectories>節纔有效。

在App_Code目錄或任何其他子目錄中放置一個assemblyinfo.cs文件,可以創建一個強命名的程序集。顯然,如果該文件夾包含Visual  Basic  .NET文件,那麼將使用assemblyinfo.vb文件。程序集配置文件可以引用一個.snk文件來保存強名稱的密鑰。

  注意        給一個程序集設置一個強名稱,首先必須獲得一個公開/私有密鑰對。通過使用強名稱(Strong  Name)工具(sn.exe),可以獲得這樣一個密鑰對。強名稱工具是我們可以在.NET  Framework的安裝路徑中發現的SDK  binary之一。密鑰對文件通常有一個.snk擴展名。可以將該文件保存到一個應用程序文件夾中,並在assemblyinfo.cs文件中引用它,如下所示:

            [assembly:  AssemblyKeyFileAttribute(@"yourKeyPair.snk")]

注意,Visual  Basic  .NET是在包含Visual  Studio  Solution的目錄中尋找密鑰文件,而C#編譯器則在包含該binary的目錄中尋找密鑰文件。據此可知,用此屬性調整我們使用的路徑,或者把密鑰文件放在合適的文件夾中。

在隨後發生的任何重新生成中,程序集的名稱將發生變化。同時,老的AppDomain請求一結束,就刪除老的程序集。

App_Code文件夾並非只能包含類文件。特別是,它可以包含並能自動地處理代表數據架構的XSD文件。把一個XSD文件  添加到該文件夾中時,編譯器將把它解析成一個有類型的DataSet類,並將它添加到應用程序作用域中。在ASP.NET  1.x中,這一工作由Visual  Studio  .NET嚮導,使用一個命令行實用程序(xsd.exe)完成的。

    注意        使用web.config文件註冊一個組件(例如,一個自定義的服務器控件或一個自定義的HTTP處理程序)時,通常要求指定包含該代碼的程序集名稱。如  果該組件定義在App_Code文件夾中,則應該用什麼名稱來指示程序集?在這種情況下,只是忽略程序集信息,並規定完整的類名即可。如果沒有規定任何程  序集,則ASP.NET運行庫將試圖從任何已裝載的程序集中裝入該類,包括爲App_Code文件夾動態創建的程序集。

4.  App_Data文件夾

App_Data文件夾應該包含應用程序的本地數據存儲。它通常以文件(諸如Microsoft  Access或Microsoft  SQL  Server  Express數據庫、XML文件、文本文件以及應用程序支持的任何其他文件)形式包含數據存儲。該文件夾內容不由ASP.NET處理。該文件夾是ASP.NET提供程序存儲自身數據的默認位置。

  注意        默認ASP.NET帳戶被授予對文件夾的完全訪問權限。如果碰巧要改變ASP.NET帳戶,一定要確保新帳戶被授予對該文件夾的讀/寫訪問權。

5.  App_GlobalResources文件夾

正如其他應用程序一樣,ASP.NET應用程序也可以使用資源,而且通常應該使用資源。資源是隔離應用程序用戶界面的可局部  化部分的一種有效方法。一般而言,資源是與程序相關的不可執行的文本。典型的資源有圖像、圖標、文本和附屬文件,但是任何可序列化的對象也可以被看作資  源。應用程序資源存儲在應用程序的外部,這樣就能在不影響和重新編譯應用程序本身的情況下重新編譯和替換它們。

ASP.NET應用程序需要有一個主要程序集來保存應用程序默認的或中性的資源。此外,還要部署許多附屬程序集,它們中各自  包含我們需要支持的某種文化的本地化資源。在ASP.NET  1.x中,編譯一個程序集內的資源有點麻煩。需要手動地將基於XML的資源文件(那些帶.res擴展名的資源)編譯成.resources二進制文件。這  些文件既可以嵌入到一個.NET可執行文件中,也可以編譯成附屬程序集。使用資源文件生成器實用程序resgen.exe,將文本和基於XML的資源文件  轉變爲.resource文件。資源文件名稱遵循baseName.cultureName.resource命名約定,其中baseName通常是應用  程序的名稱:

resgen.exe  ProAspNet20.resx  ProAspNet20.it.resources

創建.resource文件以後,應當把它嵌入到一個程序集中,甚至可以作爲一個資源容器來使用。要把一個資源文件嵌入到一個附屬程序集中,可以使用程序集連接器工具(al.exe)。在命令行上,指出程序集所使用的文化(如下面示例中的it,它代表意大利)和名稱。

al  /out:ProAspNet20.resources.dll  /c:it  /embed:ProAspNet20.it.resources

在編譯附屬程序集之後,它們將有相同的名稱。將它們部署到不同的子目錄中,分別按文化命名。

幸運的是,對於ASP.NET  2.0,附屬程序集的時代已經一去不復返了。更準確地說,附屬程序集仍然存在,但是由於App_GlobalResources保留文件夾,對開發人員來說它們已經成爲過去的事情。

該文件夾中的任何定位的.resx文件自動地被編譯成附屬程序  集。.resx文件的名稱包含文化信息,以幫助ASP.NET運行庫環境的程序集生成。如下文件,resources.resx,  resources.it.resx,  resources.fr.resx,生成中性程序集以及適合於意大利(Italian)和法國(French)文化的附屬程序集。如果沒有要求特定文  化,則中性程序集是默認的文化資源。

App_GlobalResources文件夾中的資源文件是應用程序的全局資源,因而可以從任何頁面中引用它。和ASP.NET  1.x相比資源讀取結果也極大地簡化了:

<asp:Label  Runat="server"  Text="<%$  Resources:ResxFile,  MyResName  %>"  />

可以使用最新的稱爲Resources的$-表達式以聲明的方式綁定全局資源(第5章將詳細介紹$-表達式)。該表達式包括兩個參數:.resx資源文件的名稱(沒有擴展名),以及要檢索的資源的名稱。以編程的方式訪問資源,請使用如下代碼:

HttpContext.GetGlobalResourceObject(resxFile,  MyResName)

這兩個參數都是字符串,並且與$-表達式中的參數具有相同的作用。此外,$-表達式Resources的實現在內部使用GetGlobalResourceObject。

6.  App_LocalResources文件夾

App_LocalResources文件夾位於包含一些ASP.NET頁面的文件夾下的一個子目錄。該文件夾可以使用位於  目錄結構中高一級目錄中的頁面命名的.resx文件進行填充。假定父文件夾包含test.aspx,則可以在App_LocalResources文件夾  中找到一些可用的資源文件如下:test.aspx.resx、test.aspx.it.resx和test.aspx.fr.resx。顯然,上述文  件中存儲的資源僅對test.aspx頁面有影響,因而只能在鏈接的頁面中看見它們(可以使用它們)。

如何訪問一個頁面特有的資源呢?對於編程訪問,可使用如下代碼:

HttpContext.GetLocalResourceObject("/ProAspNet20/ResPage.aspx",

"PageResource1.Title")

第1個參數指出頁面虛擬路徑;第2個參數是資源名稱。對於聲明式訪問,使用meta:ResourceKey屬性。例如,

<asp:Button  Runat="server"  meta:resourcekey="ButtonResource1"  />

該聲明將一個惟一的資源鍵與特定按鈕實例關聯。局部文件.resx包含prefix.name形式的條目,其中prefix  是資源鍵,而name是綁定控件上的屬性名。爲了賦予按鈕一個本地化標題(Text屬性),只要在資源文件中創建一個  ButtonResource1.Text條目即可。

局部和全局資源文件夾中存在的資源文件都被編譯,以創建附屬程序集的類。最後的結果是開發人員創建.resx文件,並測試該頁面。而ASP.NET編譯機制會完成其餘工作。

7.  App_Themes文件夾

App_Themes文件夾爲ASP.NET控件定義主題。主題包含在App_Themes文件夾下的一個文件夾。根據定義,一個主題是一組帶有樣式信息的文件。主題文件夾中的文件內容被編譯,以生成一個類,而該類被頁面調用以編程的方式設置主題化控件的樣式。

App_Themes文件夾列出應用程序的本地主題。  應用程序還可以繼承如下文件夾中定義的全局主題:

%WINDOWS%/Microsoft.NET/Framework/[version]/ASP.NETClientFiles/Themes

從編譯的角度看,全局主題和局部主題沒有區別。如果一個給定名稱的主題,既存在應用程序的本地主題,又存在服務器機器的全局主題,則本地主題優先適用。

8.  App_WebReferences文件夾

在Visual  Studio  .NET  2003中,一個需要訪問Web服務的ASP.NET應用程序,將通過“添加Web引用”對話框獲得相應的.wsdl文件。Web服務的WSDL(Web  Service  Description  Language)文檔,對於從頁面使用Web服務是不夠的。ASP.NET頁面最終是一個託管類,並且需要與另一個託管類通信。因此,Web服務被一個  代理類所包裝。該代理類是由Visual  Studio使用命令行工具wsdl.exe的服務創建的。該代理類儘量包含與Web服務商的Web方法一樣多的方法,並且它結合了Web服務的公共接口  定義的任何自定義的數據類型。

這個操作不需要開發人員付出很大的代價。然而,開發人員顯然要依賴於Visual  Studio來生成代理類。如果能夠直接把.wsdl文件放在應用程序的目錄樹的某個地方,並讓ASP.NET處理其餘的任務,這樣不是更容易、更簡單  嗎?這正好是App_WebReferences文件夾要做的事情。

它識別那些用來描述所綁定的Web服務的.wsdl文件,並生成運行時代理類,以便ASP.NET頁面能夠以類型安全的方式  放置對Web服務的調用。App_WebReferences文件夾可以包含子文件夾。子文件夾的名稱驅動最後所得到的代理類的命名空間,而WSDL文件  定義類名。例如,samples.wsdl文件和ProsAspNet20子文件夾將創建一個稱爲ProAspNet20.Samples的代理類。該動  態創建的程序集稱爲App_WebReferences.xxx.dll,其中xxx是一個隨機的字符序列。

文件夾名稱
  文件類型
  注        釋
 
Bin
  .dll
  包含應用程序所需的任何預生成的程序集
 
App_Browsers
  .browser
  包含應用程序特有的瀏覽器定義文件,ASP.NET用它來識別各瀏覽器及確定它們的功能
 
App_Code
  .cs、.vb、.xsd、自定義的文件類型
  包含作爲應用程序的一部分編譯的類的源文件。當頁面被請求時,ASP.NET編譯該文件夾中的代碼。該文件夾中的代碼在應用程序中自動地被引用
 
App_Data
  .mdb、.mdf、.xml
  包含Microsoft  Office  Access和SQL  Express文件以及XML文件或其他數據存儲
 
App_GlobalResources
  .resx
  包含在本地化應用程序中以編程方式使用的資源文件
 
App_LocalResources
  .resx
  包含頁面範圍的資源文件
 
App_Themes
  .skin、.CSS、.xsl、附屬文件
  包含一組定義ASP.NET頁面和控件外觀的文件
 
App_WebReferences
  .wsdl
  包含用以生成代理類的WSDL文件,以及與在應用程序中使用Web服務有關的其他文件

來自:

http://max.cszi.com/blog.asp?blogid=356
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章