<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      重溫:從aspx到dll

      今天開始,進一步深入學習asp.net,撇開ASP.NET MVC、LINQ等等,先把asp.net2.0給搞"精"咯。

      書,看的是Dino Esposito的《ASP.NET2.0高級編程》,記得看的第一本asp.net的書也是Dino Esposito寫的,在上個寒假,呵呵,雖然當時對書中講到的asp.net編譯模型有點抓狂,但他還是讓我熟悉了aspx、控件和類之間的關系。雖然看書的時候自我感覺看懂了,但每次回頭再看時,又會有不少新的認識,好書,也許就是越琢磨越有味道吧。

      說正題吧:從aspx到dll,也許題目起的不是太恰當,主要就是溫習一下一個asp.net應用程序從源代碼到投入使用之間的那些事兒吧。

      古老的ASP,在訪問者每次瀏覽asp頁面時,頁面vbscript腳本都得重新被解釋執行,但進入asp.net之后,就不是這樣了,就像jsp一樣,頁面是會被編譯的,當訪問者第二次訪問頁面時,服務器所面對的,是已經編譯好的托管代碼,可不像asp時代那樣每次都面對源代碼。但是當我們用xCopy把應用拷到服務器上后,網站就可以被訪問了,咦,編譯后的那些東西,跑哪兒去了?恩,它們跑到了C盤的某個位置下。

      我們都知道,一個aspx頁面就是一個類,它繼承自Page指令中Inhreits屬性中指出的那個類,它一般就定義在對應的aspx.cs文件中,而aspx.cs中的那個類,又是從System.Web.UI.Page繼承而來。

      讓我們打開站點根目錄的web.config,找到<compilation debug="true">,把debug值設為true,然后"Build Web Site",然后再殺到C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files文件夾下(當然,不一定所有人都把系統裝在C盤,我是這個目錄),里面有一些文件夾,其中有一個是跟我們的網站名同名,就是它了,點進去,再進入兩層文件夾,就看到了一些以App_Web打頭的cs文件,還有些以App_Web打頭的dll,還有些.compiled文件,其中每三個cs文件都組成一組,在它們的文件名中有基于0的索引,這些cs文件,就是在網站被編譯過程中的一些中間產物,先打開第"0"個cs文件(App_Web_***.0.cs),在上頭的就是一個非常眼熟的partial類,它是我們aspx.cs文件中的分部類的另一半,可以看到,這個類中有一些protected的字段,它們就是我們拖在aspx頁面中的控件,而字段名,就是我們在aspx頁面中給它們取的ID名,哦,原來如些,雖然我把控件拖在aspx頁面中,但它們在編譯時其實是被拉到后面的aspx.cs文件中的那個類里面去了,而aspx繼承于aspx.cs中的那個類,所以這些控件能在aspx中被訪問(因為被聲明成了protected),再回到前面的那個App_Web_***.0.cs 文件,往下拉,看到了namespace ASP,是定義了一個名為ASP的命名空間,再往下再往下,看到了一個***_aspx的類,它就是我們的aspx頁面在編譯時產生的了,如果aspx頁面取名叫Index.aspx,那它就會被編譯成index_aspx類(除非在Page指令中指定了ClassName屬性),它繼承自后臺的aspx.cs文件中的那個類,它個***_aspx類中有一個名為FrameworkInitialize的方法,它調用了__BuildControlTree方法,看看__BuildControlTree,就知道它是干嘛用的了,下面還有一句:this.Request.ValidateInput();,啊哈,原來這里有驗證用戶請求,所以,一旦在aspx頁面中輸入一些非法字符(如<script>),頁面就會報錯,就是它搞的了,如果在aspx的page指定中設置ValidateRequest="false",那這就不會有這個驗證了。***_aspx中還有個ProcessRequest方法,它是用來處理請求的。

      好了,看了App_Web_***.0.cs,現在看App_Web_***.1.cs,它就是我們網站中的***.aspx.cs文件。再換,看App_Web_***.2.cs, 里面是一個FastObjectFactory_app_web_***的類,Factory,一個工廠類,它里頭有個方法,里面只有一句return new ASP.***_aspx();,和和,是用來創建aspx頁面(類)實例的。

      上面這些就是中間編譯的一部分中間產物,如果在web.config中設置<compilation debug="false">的話,這些文件在編譯完成后會被刪掉,只留下了一個App_Web_***.dll(在上面debug="true"的時候,.dll是多個)和幾個***.aspx.***.compiled(有幾個aspx就有幾個.compiled),這個dll,就是我們的網站了,當它被加載到AppDomain中時,我們的網站就開始運作了。

      先說這個.compiled是干嘛用的捏?恩,先用記事本把它打開…原來是一個xml文件,看里面的filedep,原來是aspx的位置,它是干嘛用的?其實呢,當我們把網站Copy到服務器中,在第一次瀏覽時,頁面會被編譯,然后,在Temporary ASP.NET Files文件夾下相應目錄中就出現了.dll和.compiled,我們知道,當源代碼被改動時,會導致網站被重新編譯,這是比較籠統的說法,其實只要記錄在.compiled中的那些文件被改動時,就會導致網站重新編譯,我試著改動了一個aspx頁面,然后Ctrl+S保存,馬上,就看到在原先.dll所在目錄下多了一個***.dll.delete文件,因為現在網站還在運行,所以dll刪不得,于是,asp.net就搞了個.delete文件出來,標識一下,當再次Build Web Site時,就又多了一個.dll出來,現在,真正為瀏覽者服務的,是這個新的.dll,而原先那個雖然還呆在內存中不出來,但已經被革職了,時機成熟的時候,它就會被處死。那,是什么時候被處死呢?

      在應用程序重新啟動的時候它會被處死(和.delete一起),wait,什么叫應用程序重啟?我們的dll是裝在AppDomain中的,重啟就是AppDomain被卸載,然后start over,dll是不能單獨被卸載的,AppDomain卸載后,應用程序會被重新編譯,然后干干凈凈裝到新的AppDomain中,網站,又開始運作了。

      那什么情況會導致應用程序重啟?

      一、web.config及global.asax這些應用程序文件被修改的時候;

      二、當應用程序被重新編譯15次(默認,可以改)之后。Note that,重新編譯并不是應用程序重啟,它只是會使得web應用被重新編譯到一個dll中,然后搞個0kb的文件,文件名就是在舊的dll文件名后加上.delete,這就算給這個舊dll作了個記號,說這個dll是舊的,一會兒要記得把它丟垃圾桶去哈。但是,仁慈的我總不能對它見死不救,于是,我把這個.delete文件名給改了,在應用程序重啟時,.delete是犧牲了,但那個舊dll留下來了,當然,它現在也已武功盡失,新dll已經代替了它的位置。

       

      至此,今天的總結就差不多了。

      THE END.

      posted @ 2008-06-20 01:55  水言木  閱讀(1536)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品老熟女一区二区| 加勒比精品一区二区三区| 国产首页一区二区不卡| 亚洲欧洲日韩国内精品| 国精品午夜福利不卡视频| 亚洲综合中文字幕第一页| 色伦专区97中文字幕| 施秉县| 日本一区二区久久人妻高清| 国产不卡一区二区在线视频| 一个人免费观看WWW在线视频| 免费现黄频在线观看国产| 精品国产av无码一区二区三区| 成人午夜在线观看日韩| 午夜视频免费试看| 国产无码高清视频不卡 | 日本亲近相奷中文字幕| 日韩毛片在线视频x| 亚洲欧美日韩在线不卡| 精品无码午夜福利理论片| 麻豆一区二区三区精品视频| 国产精品视频白浆免费视频| 亚洲人精品午夜射精日韩| 欧美18videosex性欧美tube1080| 男女激情一区二区三区| 老熟女重囗味hdxx69| 在线精品视频一区二区三四| 久久99精品久久久久久不卡| 91精品乱码一区二区三区| 我国产码在线观看av哈哈哈网站| 亚洲综合另类小说色区一| 中文字幕乱码在线播放| 中文字幕亚洲国产精品| 18禁裸乳无遮挡自慰免费动漫| 97精品亚成在人线免视频| 精品视频在线观看免费观看| 景洪市| 亚洲国产成人久久77| 亚洲成人动漫av在线| 亚洲有无码中文网| 日韩AV高清在线看片|