成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解ASP.NET動態編譯

開發 后端
本文介紹ASP.NET動態編譯下的大體的執行流程:當ASP.NET收到一個基于某個page的request的時候,先判斷該Page和相關的Source code是否編譯過,如果沒有就將其編譯。

1.動態編譯的過程

我們先來介紹在ASP.NET動態編譯下的大體的執行流程:當ASP.NET收到一個基于某個page的request的時候,先判斷該Page和相關的Source code是否編譯過,如果沒有就將其編譯,如果已經編譯,就是用已經Load的Assembly直接生成Page對象。

在這里有下面幾點需要注意:

1). ASP.NET動態編譯是按需編譯的,ASP.NET只會編譯和當前Request相關的aspx和code。

2). ASP.NET動態編譯是基于某個目錄的,也就是說ASP.NET會把被請求的page所在的目錄的所有需要編譯的文件進行編譯,并生成一個Assembly。

3). 除了編譯生成的Assembly外,動態編譯還會生成一系列的輔助文件。

4). 對相關文件的修改,會導致重新編譯,但是修改對當前的Request不起作用。也就是說如果你對某個aspx進行修改,那么對于修改后抵達的Request,會導致重新編譯,但是對于之前的Request使用的依然是原來編譯好的Assembly。

5). 編譯生成的文件被放在一個臨時目錄中,這個目錄的地址為Windows Directory\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files。其具體的目錄結構如下圖所示:

具體的目錄結構

在Temporary ASP.NET Files下的Artech.ASPNETDeployment是IIS中Virtual Directory的名稱,以下兩級目錄的名稱由Hash value構成,所以編譯生成的文件就保存在c6f16246目錄下。這個目錄你可以通過HttpRuntime.CodegenDir獲得。

Directory\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files只是一個默認的臨時目錄,你可以在web config中的compilation section中設置你需要的臨時目錄。

  1. <compilation tempDirectory="d:\MyTempFiles" /> 

2.Sample

現在我用一個Sample來一探ASP.NET是如何進行動態編譯的。

ASP.NET是如何進行動態編譯

在這個Sample中,我建立了一個Website,在根目錄下創建了兩個Page:Default和Default2。

在兩個子目錄Part I和Part II下分別創建了兩個Web page:Page1和Page2。在App_Code目錄中創建了一個Utility的static class。下面是它的定義:

  1. publicstaticclassUtility  
  2. {  
  3. publicstaticstringReflectAllAssmebly()  
  4. {  
  5. StringBuilderrefllectionResult=newStringBuilder();  
  6.  
  7. foreach(AssemblyassemblyinAppDomain.CurrentDomain.GetAssemblies())  
  8. {  
  9. if(!assembly.FullName.Contains("App_Web"))  
  10. {  
  11. continue;  
  12. }  
  13.  
  14. refllectionResult.Append(assembly.FullName+"<br/>");  
  15. Type[]allType=assembly.GetTypes();  
  16. foreach(TypetypeInfoinallType)  
  17. {  
  18. refllectionResult.Append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+typeInfo.Name+"<br/>");  
  19. }  
  20. }  
  21.  
  22. returnrefllectionResult.ToString();  
  23. }  

內容很簡單,對當前加載的所有相關的Assembly(這些Assembly的Fullname以App_Web打頭)進行Reflection,列出所有的Type。這個ReflectAllAssmebly將在5個Web page(Default Page和兩隊Page1&Page2)的Page_Load事件中被調用。

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3. this.Response.Write(Utility.ReflectAllAssmebly());  

Default是列出所有4Page對應的Link以便我們訪問它們,在我們再進行編譯的情況下在IE中輸入對應的URL來訪問Default Page。(其他Page的Html中不具有真正的內容,是一個空的page.)

URL來訪問Default Page

通過上面的顯示,我們可以看到現在有一個Assembly:App_Web_wh7-uda5。該Asssembly定一個的Type有5個,  _Default和 default_aspx分別對應Default Page,而Default2和 default2_aspxDefault2 Page的。FastObjectFactory_app_web_wh7_uda5是很重要的Type,我將會在后面對其進行深入介紹。正如我們在上面說過的,動態編譯是按需編譯,現在我們對Default Page進行訪問,由于這次對該Website的***次訪問,所有需要的Source Code,包括aspx,code behind都要進行編譯。在這個Sample中,雖然我們并沒有訪問Default2 page,但是我們說過,ASP.NET動態編譯是基于目錄的,由于Default Page和Default2 Page都直接置于根目錄下,所以ASP.NET會把根目錄下的所有文件編譯到一個Assembly中。由于Page1和Page2位于子目錄Part I和Part II之下,所以不會參與編譯。除非我們下載對它進行Request。

我們現在來訪問Part I下的Page1和Page2看看會有什么結果。我們會發現,兩次Request獲得的輸出是一樣的:

Request獲得的輸出


通過上面的輸出我們發現,當前AppDomain中被加載的Assembly多了一個:App_Web_n1mhegpg。我們可以通過定義在該Assembly中的Type的命名可以猜出該Assembly是對Part I 目錄進行編譯產生的。Page1和Page2的編譯后的Type name變成了part_i_page1_aspx& Page1和part_i_page2_aspx& Page2。此外我們看到,該Assembly中依然有一個FastObjectFactory的Type:FastObjectFactory_app_web_n1mhegpg。在這里我需要特別指出的是,名稱的后綴都是通過 Hash算法得到的。

有了上面的理論和實驗結果,我想這個時候,你肯定已經想到,如果我現在對Part II的Page1和Page2進行訪問,輸出結果會是什么樣子了。

輸出結果


如果這個時候,你查看臨時目錄(Directory\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files)中該Website對應的子目錄,已將會看到生成了一些列的文件。

【編輯推薦】

  1. 微軟發布ASP.NET MVC 2預覽版 多項功能更新
  2. ASP.NET服務器自定義控件安全準則
  3. ASP.NET編程規范之編碼規范淺析
  4. 關于ASP.NET Session的一點認識
  5. ASP.NET編程工具ASP.NET Web Matrix詳細介紹
責任編輯:佚名 來源: csdn
相關推薦

2009-08-04 18:05:37

動態編譯ASP.NET

2009-07-29 16:08:07

ASP和ASP.NET

2009-07-22 16:25:41

ASP.NET AJA

2009-07-24 10:14:22

ASP.NET開發

2009-07-28 16:57:50

ASP.NET Ses

2009-08-05 11:14:33

ASP.NET ISA

2009-07-23 13:19:51

2009-07-21 15:40:59

Asp.Net動態頁面

2009-07-23 13:09:23

2009-08-19 13:44:00

ASP.NET Lis

2009-08-04 10:43:59

ASP.NET控件開發

2009-07-28 13:39:44

加載ViewStateASP.NET

2009-08-04 15:52:58

ASP.NET編譯器

2009-07-28 10:01:16

ASP.NET Exc

2009-08-04 15:58:06

ASP.NET動態控件

2010-03-19 09:17:16

ASP.NET MVC

2009-07-23 13:26:21

2009-08-01 22:47:13

ASP.NET筆試題目ASP.NET

2009-07-30 14:00:21

ASP.NET 2.0

2009-07-28 13:48:28

ASP.NET樹形圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 毛片免费在线 | 日韩中文字幕一区 | 国产成人影院 | 国产精品久久国产精品 | 国产精品国产三级国产aⅴ无密码 | 欧美日韩中 | av免费在线观看网站 | 国产精品精品久久久久久 | a精品视频| 精品国产99 | 拍真实国产伦偷精品 | 国产免费让你躁在线视频 | 在线不卡av | 国产精品国产三级国产aⅴ中文 | 久久神马 | 天堂中文字幕av | 日韩欧美在线一区 | 亚洲精品无人区 | 天天干视频在线 | 日一区二区 | 久久99精品久久久久久国产越南 | 精品国产乱码久久久久久图片 | 亚洲精品免费视频 | 最新免费视频 | 欧美日韩精品一区二区天天拍 | 国产91在线播放 | 91精品国产日韩91久久久久久 | 国产丝袜一区二区三区免费视频 | 成人深夜福利 | 国产精品色婷婷久久58 | 国产精品一区二区视频 | 亚洲va欧美va天堂v国产综合 | 国产精品久久国产精品 | 欧美日韩黄 | 成人精品视频 | 黄色片大全在线观看 | 亚洲综合免费 | 美女视频一区 | 久久www免费人成看片高清 | 亚洲国产一区视频 | 国产成人精品免费视频 |