熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET 網站中的共享代碼文件夾

2013-11-13 10:22:13  來源: .NET編程 
    網站中的共享代碼文件夾
    如果您的 Web 應用程序包括要在多個頁之間共享的代碼您可以將代碼保存在 Web 應用程序根目錄下的兩個特殊文件夾(Bin 文件夾和 App_Code 文件夾)中的某個文件夾中當您創建這些文件夾並在其中存儲特定類型的文件時ASPNET 將使用特殊方式處理這些文件
    Bin 文件夾
    可以在 Bin 文件夾中存儲編譯的程序集並且 Web 應用程序任意處的其他代碼(如頁代碼)會自動引用該文件夾典型的示例是您為自定義類編譯好的代碼您可以將編譯後的程序集復制到 Web 應用程序的 Bin 文件夾中這樣所有頁都可以使用這個類
    Bin 文件夾中的程序集無需注冊只要 dll 文件存在於 Bin 文件夾中ASPNET 就可以識別它如果您更改了 dll 文件並將它的新版本寫入到了 Bin 文件夾中則 ASPNET 會檢測到更新並對隨後的新頁請求使用新版本的 dll 文件
   Bin 文件夾的安全性
    將編譯後的程序集放入 Bin 文件夾中會帶來安全風險如果是您自己編寫和編譯的代碼那麼您了解代碼的功能但是您必須像對待任何可執行代碼一樣來對待 Bin 文件夾中已編譯的代碼在完成代碼測試並確信已了解代碼功能之前要對已編譯的代碼保持謹慎的態度
    請注意以下安全方面的知識這些知識與是否將已編譯的代碼放入 Bin 文件夾有關
    Bin 文件夾中程序集的作用范圍為當前應用程序因此它們無法訪問當前 Web 應用程序之外的資源或調用當前 Web 應用程序之外的代碼
    運行時程序集的訪問級別由本地計算機上指定的信任級別確定有關更多信息請參見 ASPNET 信任級別和策略文件
    如果您使用了諸如 Visual Studio 這樣的設計器那麼 Bin 文件夾中的代碼運行所在的上下文與運行時不同例如代碼可能以完全信任狀態運行


App_Code 文件夾
    可以在 App_Code 文件夾中存儲源代碼在運行時將會自動對這些代碼進行編譯Web 應用程序中的其他任何代碼都可以訪問產生的程序集因此App_Code 文件夾的工作方式與 Bin 文件夾很類似不同之處是您可以在其中存儲源代碼而非已編譯的代碼App_Code 文件夾及其在 ASPNET Web 應用程序中的特殊地位使您可以創建自定義類和其他僅源代碼文件並在 Web 應用程序中使用它們而不必單獨對它們進行編譯
    App_Code 文件夾可以包含以傳統類文件(即帶有 vbcs 等擴展名的文件)的形式編寫的源代碼文件但是它也可以包含並非明確顯示出由某一特定編程語言編寫的文件例如 wsdl(Web 服務描述語言)文件和 xml 架構 (xsd) 文件ASPNET 可以將這些文件編譯成程序集
    根據您的需要App_Code 文件夾可以包含任意數量的文件和子文件夾您可以采用任何您認為方便的方式組織源代碼ASPNET 仍會將所有代碼編譯成單個程序集並且 Web 應用程序任意處的其他代碼都可以訪問該程序集
注意
    在 App_Code 文件夾中不允許使用用戶控件這包括單文件用戶控件以及使用代碼隱藏模型的用戶控件將用戶控件置於 App_Code 目錄中會導致不按用戶控件代碼所要求的順序對其進行編譯因此是不允許的請注意不需要將用戶控件置於 App_Code 文件夾中因為處於應用程序中任何位置的頁都已經可以使用這些控件
    推斷 App_Code 文件夾的編程語言
    App_Code 文件夾並未顯式標記為包含以任何一種編程語言編寫的文件相反ASPNET 是根據 App_Code 文件夾所包含的文件來推斷應為 App_Code 文件夾調用哪一種編譯器如果 App_Code 文件夾包含 vb 文件則 ASPNET 使用 Visual Basic 編譯器如果包含 cs 文件則 ASPNET 使用 C# 編譯器以此類推
    如果 App_Code 文件夾只包含並未明確表明編程語言的文件(如 wsdl 文件)則 ASPNET 將使用 Web 應用程序的默認編譯器默認編譯器在 Web 應用程序或計算機配置文件的 compilation 元素中確定
    在 App_Code 文件夾中使用多種編程語言
    因為 App_Code 文件夾中的源代碼要編譯成單個程序集所以 App_Code 文件夾中的所有文件必須使用相同的編程語言編寫例如App_Code 文件夾不能同時包含采用 Visual Basic 和 C# 編寫的源代碼
    但是您可以對 Web 應用程序進行配置使其將 App_Code 文件夾的子文件夾作為獨立的可編譯單元處理這樣每一個文件夾就可以包含以不同編程語言編寫的源代碼通過在 nfig 文件的 codeSubDirectories 元素中創建一個 compilation 元素然後添加一個對子文件夾的引用即可指定該配置下面的示例闡釋如何對名為 VBCode 和 CSCode 的子文件夾進行配置使其編譯成不同的程序集
    復制代碼
    <compilation debug=false>
    <codeSubDirectories>
    <add directoryName=VBCode />
    <add directoryName=CSCode />
    </codeSubDirectories>
    </compilation>對 VBCode 和 CSCode 子文件夾的引用並不需要包括任何有關子文件夾中所包含的編程語言的信息就像對待 App_Code 文件夾本身一樣ASPNET 會根據子文件夾中的文件來推斷要使用的編譯器
    App_Code 文件夾的安全性
    App_Code 文件夾中的代碼存在的安全問題基本上與 Bin 文件夾中的代碼存在的安全問題相同 代碼都會在運行時編譯成程序集比 Bin 文件夾要好一些的是您可以閱讀 App_Code 文件夾中文件的源代碼但是如果您不能完全理解代碼仍然會存在安全風險因此對待 App_Code 文件夾中的源代碼的態度必須像對待基於同樣的源代碼生成的已編譯代碼一樣謹慎


From:http://tw.wingwit.com/Article/program/net/201311/13410.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.