Bin 和 App_Code 文件夾介紹
更新時(shí)間:2007年04月13日 00:00:00 作者:
如果您的 Web 應(yīng)用程序包括要在多個(gè)頁之間共享的代碼,您可以將代碼保存在 Web 應(yīng)用程序根目錄下的兩個(gè)特殊文件夾(Bin 文件夾和 App_Code 文件夾)中的某個(gè)文件夾中。
Bin 文件夾
可以在 Bin 文件夾中存儲編譯的程序集,并且 Web 應(yīng)用程序任意處的其他代碼(如頁代碼)會(huì)自動(dòng)引用該文件夾。典型的示例是您為自定義類編譯好的代碼。您可以將編譯后的程序集復(fù)制到 Web 應(yīng)用程序的 Bin 文件夾中,這樣所有頁都可以使用這個(gè)類。
Bin 文件夾中的程序集無需注冊。只要 .dll 文件存在于 Bin 文件夾中,ASP.NET 就可以識別它。如果您更改了 .dll 文件,并將它的新版本寫入到了 Bin 文件夾中,則 ASP.NET 會(huì)檢測到更新,并對隨后的新頁請求使用新版本的 .dll 文件。
Bin 文件夾的安全性
將編譯后的程序集放入 Bin 文件夾中會(huì)帶來安全風(fēng)險(xiǎn)。如果是您自己編寫和編譯的代碼,那么您了解代碼的功能。但是,如果不是您自己編寫和編譯的代碼,那么您必須像對待任何可執(zhí)行代碼一樣來對待 Bin 文件夾中已編譯的代碼。在完成代碼測試并確信已了解代碼功能之前,要對已編譯的代碼保持謹(jǐn)慎的態(tài)度。
請注意以下安全方面的知識,這些知識與是否將已編譯的代碼放入 Bin 文件夾有關(guān):
Bin 文件夾中程序集的作用范圍為當(dāng)前應(yīng)用程序。因此,它們無法訪問當(dāng)前 Web 應(yīng)用程序之外的資源或調(diào)用當(dāng)前 Web 應(yīng)用程序之外的代碼。
運(yùn)行時(shí),程序集的訪問級別由本地計(jì)算機(jī)上指定的信任級別確定。
如果您使用了諸如 Visual Studio 這樣的設(shè)計(jì)器,那么 Bin 文件夾中的代碼運(yùn)行所在的上下文與運(yùn)行時(shí)不同。例如,代碼可能以完全信任狀態(tài)運(yùn)行。
App_Code 文件夾
可以在 App_Code 文件夾中存儲源代碼,在運(yùn)行時(shí)將會(huì)自動(dòng)對這些代碼進(jìn)行編譯。Web 應(yīng)用程序中的其他任何代碼都可以訪問產(chǎn)生的程序集。因此,App_Code 文件夾的工作方式與 Bin 文件夾很類似,不同之處是您可以在其中存儲源代碼而非已編譯的代碼。App_Code 文件夾及其在 ASP.NET Web 應(yīng)用程序中的特殊地位使您可以創(chuàng)建自定義類和其他僅源代碼文件,并在 Web 應(yīng)用程序中使用它們而不必單獨(dú)對它們進(jìn)行編譯。
App_Code 文件夾可以包含以傳統(tǒng)類文件(即帶有 .vb、.cs 等擴(kuò)展名的文件)的形式編寫的源代碼文件。但是,它也可以包含并非明確顯示出由某一特定編程語言編寫的文件。例如 .wsdl(Web 服務(wù)發(fā)現(xiàn)語言)文件和 XML 架構(gòu) (.xsd) 文件。ASP.NET 可以將這些文件編譯成程序集。
根據(jù)您的需要,App_Code 文件夾可以包含任意數(shù)量的文件和子文件夾。您可以采用任何您認(rèn)為方便的方式組織源代碼,ASP.NET 仍會(huì)將所有代碼編譯成單個(gè)程序集,并且 Web 應(yīng)用程序任意處的其他代碼都可以訪問該程序集。
推斷 App_Code 文件夾的編程語言
App_Code 文件夾并未顯式標(biāo)記為包含以任何一種編程語言編寫的文件。相反,ASP.NET 是根據(jù) App_Code 文件夾所包含的文件來推斷應(yīng)為 App_Code 文件夾調(diào)用哪一種編譯器。如果 App_Code 文件夾包含 .vb 文件,則 ASP.NET 使用 Visual Basic 編譯器;如果包含 .cs 文件,則 ASP.NET 使用 C# 編譯器,以此類推。
如果 App_Code 文件夾只包含并未明確表明編程語言的文件(如 .wsdl 文件),則 ASP.NET 將使用 Web 應(yīng)用程序的默認(rèn)編譯器,默認(rèn)編譯器在 Web 應(yīng)用程序或計(jì)算機(jī)配置文件的 <compilation> 元素中確定。
在 App_Code 文件夾中使用多種編程語言
因?yàn)?nbsp;App_Code 文件夾中的源代碼要編譯成單個(gè)程序集,所以 App_Code 文件夾中的所有文件必須使用相同的編程語言編寫。例如,App_Code 文件夾不能同時(shí)包含采用 Visual Basic 和 C# 編寫的源代碼。
但是,您可以對 Web 應(yīng)用程序進(jìn)行配置,使其將 App_Code 文件夾的子文件夾作為獨(dú)立的可編譯單元處理。這樣,每一個(gè)文件夾就可以包含以不同編程語言編寫的源代碼。通過在 Web.config 文件的 <compilation> 元素中創(chuàng)建一個(gè) <codeSubDirectories> 元素,然后添加一個(gè)對子文件夾的引用,即可指定該配置。下面的示例闡釋如何對名為 VBCode 和 CSCode 的子文件夾進(jìn)行配置,使其編譯成不同的程序集:
<compilation debug="false"> <codeSubDirectories> <add directoryName="VBCode" /> <add directoryName="CSCode" /> </codeSubDirectories></compilation>
請注意,對 VBCode 和 CSCode 子文件夾的引用并未包括任何有關(guān)子文件夾中所包含的編程語言的信息。就像對待 App_Code 文件夾本身一樣,ASP.NET 會(huì)根據(jù)子文件夾中的文件來推斷要使用的編譯器。
App_Code 文件夾的安全性
App_Code 文件夾中的代碼存在的安全問題基本上與 Bin 文件夾中的代碼存在的安全問題相同 - 代碼都要編譯成程序集并在運(yùn)行時(shí)執(zhí)行。比 Bin 文件夾要好一些的是,您可以閱讀 App_Code 文件夾中文件的源代碼。但是,如果您不能完全理解代碼,仍然會(huì)存在安全風(fēng)險(xiǎn)。因此,對待 App_Code 文件夾中的源代碼的態(tài)度必須像對待基于同樣的源代碼生成的已編譯代碼一樣謹(jǐn)慎。
Bin 文件夾
可以在 Bin 文件夾中存儲編譯的程序集,并且 Web 應(yīng)用程序任意處的其他代碼(如頁代碼)會(huì)自動(dòng)引用該文件夾。典型的示例是您為自定義類編譯好的代碼。您可以將編譯后的程序集復(fù)制到 Web 應(yīng)用程序的 Bin 文件夾中,這樣所有頁都可以使用這個(gè)類。
Bin 文件夾中的程序集無需注冊。只要 .dll 文件存在于 Bin 文件夾中,ASP.NET 就可以識別它。如果您更改了 .dll 文件,并將它的新版本寫入到了 Bin 文件夾中,則 ASP.NET 會(huì)檢測到更新,并對隨后的新頁請求使用新版本的 .dll 文件。
Bin 文件夾的安全性
將編譯后的程序集放入 Bin 文件夾中會(huì)帶來安全風(fēng)險(xiǎn)。如果是您自己編寫和編譯的代碼,那么您了解代碼的功能。但是,如果不是您自己編寫和編譯的代碼,那么您必須像對待任何可執(zhí)行代碼一樣來對待 Bin 文件夾中已編譯的代碼。在完成代碼測試并確信已了解代碼功能之前,要對已編譯的代碼保持謹(jǐn)慎的態(tài)度。
請注意以下安全方面的知識,這些知識與是否將已編譯的代碼放入 Bin 文件夾有關(guān):
Bin 文件夾中程序集的作用范圍為當(dāng)前應(yīng)用程序。因此,它們無法訪問當(dāng)前 Web 應(yīng)用程序之外的資源或調(diào)用當(dāng)前 Web 應(yīng)用程序之外的代碼。
運(yùn)行時(shí),程序集的訪問級別由本地計(jì)算機(jī)上指定的信任級別確定。
如果您使用了諸如 Visual Studio 這樣的設(shè)計(jì)器,那么 Bin 文件夾中的代碼運(yùn)行所在的上下文與運(yùn)行時(shí)不同。例如,代碼可能以完全信任狀態(tài)運(yùn)行。
App_Code 文件夾
可以在 App_Code 文件夾中存儲源代碼,在運(yùn)行時(shí)將會(huì)自動(dòng)對這些代碼進(jìn)行編譯。Web 應(yīng)用程序中的其他任何代碼都可以訪問產(chǎn)生的程序集。因此,App_Code 文件夾的工作方式與 Bin 文件夾很類似,不同之處是您可以在其中存儲源代碼而非已編譯的代碼。App_Code 文件夾及其在 ASP.NET Web 應(yīng)用程序中的特殊地位使您可以創(chuàng)建自定義類和其他僅源代碼文件,并在 Web 應(yīng)用程序中使用它們而不必單獨(dú)對它們進(jìn)行編譯。
App_Code 文件夾可以包含以傳統(tǒng)類文件(即帶有 .vb、.cs 等擴(kuò)展名的文件)的形式編寫的源代碼文件。但是,它也可以包含并非明確顯示出由某一特定編程語言編寫的文件。例如 .wsdl(Web 服務(wù)發(fā)現(xiàn)語言)文件和 XML 架構(gòu) (.xsd) 文件。ASP.NET 可以將這些文件編譯成程序集。
根據(jù)您的需要,App_Code 文件夾可以包含任意數(shù)量的文件和子文件夾。您可以采用任何您認(rèn)為方便的方式組織源代碼,ASP.NET 仍會(huì)將所有代碼編譯成單個(gè)程序集,并且 Web 應(yīng)用程序任意處的其他代碼都可以訪問該程序集。
推斷 App_Code 文件夾的編程語言
App_Code 文件夾并未顯式標(biāo)記為包含以任何一種編程語言編寫的文件。相反,ASP.NET 是根據(jù) App_Code 文件夾所包含的文件來推斷應(yīng)為 App_Code 文件夾調(diào)用哪一種編譯器。如果 App_Code 文件夾包含 .vb 文件,則 ASP.NET 使用 Visual Basic 編譯器;如果包含 .cs 文件,則 ASP.NET 使用 C# 編譯器,以此類推。
如果 App_Code 文件夾只包含并未明確表明編程語言的文件(如 .wsdl 文件),則 ASP.NET 將使用 Web 應(yīng)用程序的默認(rèn)編譯器,默認(rèn)編譯器在 Web 應(yīng)用程序或計(jì)算機(jī)配置文件的 <compilation> 元素中確定。
在 App_Code 文件夾中使用多種編程語言
因?yàn)?nbsp;App_Code 文件夾中的源代碼要編譯成單個(gè)程序集,所以 App_Code 文件夾中的所有文件必須使用相同的編程語言編寫。例如,App_Code 文件夾不能同時(shí)包含采用 Visual Basic 和 C# 編寫的源代碼。
但是,您可以對 Web 應(yīng)用程序進(jìn)行配置,使其將 App_Code 文件夾的子文件夾作為獨(dú)立的可編譯單元處理。這樣,每一個(gè)文件夾就可以包含以不同編程語言編寫的源代碼。通過在 Web.config 文件的 <compilation> 元素中創(chuàng)建一個(gè) <codeSubDirectories> 元素,然后添加一個(gè)對子文件夾的引用,即可指定該配置。下面的示例闡釋如何對名為 VBCode 和 CSCode 的子文件夾進(jìn)行配置,使其編譯成不同的程序集:
<compilation debug="false"> <codeSubDirectories> <add directoryName="VBCode" /> <add directoryName="CSCode" /> </codeSubDirectories></compilation>
請注意,對 VBCode 和 CSCode 子文件夾的引用并未包括任何有關(guān)子文件夾中所包含的編程語言的信息。就像對待 App_Code 文件夾本身一樣,ASP.NET 會(huì)根據(jù)子文件夾中的文件來推斷要使用的編譯器。
App_Code 文件夾的安全性
App_Code 文件夾中的代碼存在的安全問題基本上與 Bin 文件夾中的代碼存在的安全問題相同 - 代碼都要編譯成程序集并在運(yùn)行時(shí)執(zhí)行。比 Bin 文件夾要好一些的是,您可以閱讀 App_Code 文件夾中文件的源代碼。但是,如果您不能完全理解代碼,仍然會(huì)存在安全風(fēng)險(xiǎn)。因此,對待 App_Code 文件夾中的源代碼的態(tài)度必須像對待基于同樣的源代碼生成的已編譯代碼一樣謹(jǐn)慎。
相關(guān)文章
Visual Studio 2017正式版發(fā)布 Mac版新功能特性有哪些
Visual Studio 2017正式版推出時(shí)間什么時(shí)候?Mac版新功能特性又有哪些?這篇文章就為大家詳細(xì)介紹Visual Studio 2017正式版的最新消息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03asp.net XML文件操作實(shí)現(xiàn)代碼
這幾天在項(xiàng)目中用到了XML文件配置存儲一些基本信息,如:參數(shù)、表格等一些信息存儲。由于記錄不是很多,所以用此文件來代替數(shù)據(jù)庫中設(shè)計(jì)的表結(jié)構(gòu)。2009-12-12iis中為每個(gè)應(yīng)用程序池單獨(dú)設(shè)置aspnet.config配置文件
ASP.NET2.0之后的版本就在各Framework的根目錄下提供了一個(gè)aspnet.config文件,這個(gè)文件用來配置全局的一些信息,但是一直以來我們都沒有怎么用過2011-12-12Asp.net FCKEditor 2.6.3 上傳文件沒有權(quán)限解決方法
到Fckeditor官方網(wǎng)站下載FredCK.FCKeditorV2.vs2005 (asp.net)2009-02-02ASP.NET Core Web App應(yīng)用第三方Bootstrap模板的方法教程
這篇文章主要給大家介紹了關(guān)于ASP.NET Core Web App應(yīng)用第三方Bootstrap模板的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起看看吧2018-06-06asp.net 需要登陸的網(wǎng)站上下載網(wǎng)頁源代碼和文件
最近有個(gè)項(xiàng)目需要從網(wǎng)絡(luò)上下載網(wǎng)頁信息和文件,并且需要登錄后才能下載,所以做了個(gè)下載的通用類,供大家參考。2009-05-05C#/.NET讀取或修改文件的創(chuàng)建時(shí)間及修改時(shí)間詳解
這篇文章主要給大家介紹了關(guān)于C#/.NET讀取或修改文件的創(chuàng)建時(shí)間及修改時(shí)間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08