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

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

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

      解讀ASP.NET 5 & MVC6系列(4):核心技術(shù)與環(huán)境配置

      2015-05-17 19:21  湯姆大叔  閱讀(21866)  評(píng)論(15)    收藏  舉報(bào)

      asp.net 5是下一代的asp.net,該版本進(jìn)行了全部重寫以適用于跨平臺(tái),新新版本中,微軟引入了如下工具與命令:DNVM、DNX、DNU。

      DNVM(.NET Version Manager):由于要實(shí)現(xiàn)跨平臺(tái)的目錄,微軟提供了DNVM功能,DNVM是ASP.NET最底層的內(nèi)容,他是一組Powershell腳本,用于啟動(dòng)指定版本的ASP.NET運(yùn)行環(huán)境,并且可以在同一臺(tái)機(jī)器的同一時(shí)間點(diǎn)上通過使用Nuget工具來管理各種版本的ASP.NET運(yùn)行環(huán)境(DNX),以及進(jìn)行相應(yīng)的升級(jí)操作。

      DNX(.NET Execution Environment):DNX是ASP.NET程序的運(yùn)行環(huán)境,用于啟動(dòng)并運(yùn)行ASP.NET程序。該運(yùn)行環(huán)境包括了編譯系統(tǒng)、SDK工具集、Native CLR宿主環(huán)境。可以使用DNVM管理各種版本的DNX,如dnvm list命令可以列出所有可用的DNX環(huán)境,而dnvm install 0.1-alpha-build-0446則可以將指定版本的DNX安裝到.dnx文件夾,你可以在%USERPROFILE%\.dnx\runtimes 目錄下找到已安裝所有版本的DNX。不同的操作系統(tǒng)有不同的DNX版本。

      dnx.exe:dnx.exe是用于啟動(dòng)自宿主環(huán)境(Self-Hosting)的命令行工具,在使用命令行代碼進(jìn)行自宿主環(huán)境啟動(dòng)程序時(shí),dnx負(fù)責(zé)查找并調(diào)用CLR Native Host,dnx命令是整個(gè)運(yùn)行環(huán)境的入口點(diǎn),你可以使用dnx run來啟動(dòng)程序。

      dnu(DNX Utility):是一個(gè)命令行的包管理器,包含在DNX內(nèi),所以只要安裝了DNX,就可以使用dnu命令, 其可以用于恢復(fù)程序包、安裝程序包、部署程序包等等,比如把project.json里自定義的程序集自動(dòng)下載下來進(jìn)行使用。

      DNX架構(gòu)及運(yùn)行原理

      DNX是ASP.NET程序運(yùn)行的核心,其遵循如下兩個(gè)準(zhǔn)則:

      1. DNX應(yīng)該是自包含的,DNX在解析完應(yīng)用程序依賴樹以后才能知道要使用哪個(gè)Core CLR包,所以在得到解析樹之前,DNX是無法加載任何CLR的,但Roslyn編譯器除外。
      2. 依賴注入(Dependency Injection,簡稱DI)貫穿著整個(gè)系統(tǒng)棧,DI是DNX的一個(gè)核心部分,所有DNX上的類庫都構(gòu)建在DI之上。

      DNX執(zhí)行環(huán)境的分層架構(gòu)如下:

      Layer 0:Native Process

      該層的功能非常簡單,主要就是用于查找并調(diào)用Layer 1里的CLR Native Host,并將系統(tǒng)相關(guān)的參數(shù)傳遞給native host,以便后續(xù)使用。目前Windows下使用DNX.exe來處理這個(gè)事情,而IIS也提供了一個(gè)中介(網(wǎng)站bin目錄下提供一個(gè)AspNet.Loader.dll)可以將請(qǐng)求轉(zhuǎn)發(fā)給Native Host;而Linux和Mac則通過其相應(yīng)版本的dnx來支持這項(xiàng)功能。

      DNX用法:

      dnx.exe --lib {paths} --appbase {path} [ProgramName]
      

      --lib {paths}:程序集dll的保存地址(一般是引用的第三方程序集和項(xiàng)目預(yù)編譯程序集),該地址是Layer 2層的托管代碼入口點(diǎn)可以加載程序集的地方。

      --appbase {path}:程序保存的目錄,默認(rèn)為%CD%。

      [ProgramName]:程序名稱,該程序所在的程序集(或者是含有Programe::Main的dll)保存在--lib 路徑下,默認(rèn)值是appbase\project.json里的name。大多數(shù)情況下,該名稱都是包含著加載鏈的程序宿主(Microsoft.Net.ApplicationHost)。但是,如果你的程序包含了入口點(diǎn)(Main方法),并被編譯到--lib目錄下的話,你就可以使用該程序集的名稱作為[ProgramName],這種方式將完全忽略加載鏈并直接啟動(dòng)你的程序。

      Layer 1 : CLR Native Host

      這一層的內(nèi)容依賴于你所選擇呢CLR版本,該層有如下兩個(gè)職責(zé):

      1. 啟動(dòng)CLR,啟動(dòng)哪個(gè)CLR取決于你選擇的CLR版本。如果是Core CLR,該層會(huì)加載coreclr.dll,配置并啟動(dòng)運(yùn)行環(huán)境,然后創(chuàng)建應(yīng)用程序域(AppDomain),以便運(yùn)行所有的托管代碼。
      2. 調(diào)用托管代碼的入口點(diǎn)(Layer 2),一旦Native Host的入口點(diǎn)返回了該線程,就會(huì)把CLR的線程清理干凈并關(guān)閉,比如,卸載應(yīng)用程序域(AppDomain)并停止運(yùn)行環(huán)境。

      Layer 2:Managed Entry Point

      Layer 2層(托管代碼入口)是編寫托管代碼的第一層,其職責(zé)如下:

      1. 創(chuàng)建LoaderContainer(其包含需要的ILoaders),ILoader負(fù)責(zé)根據(jù)程序集的名稱來加載程序集。CLR需要一個(gè)程序集的話,LoaderContainer就會(huì)使用其ILoader來解析所需要的程序集。
      2. --lib的路徑目錄下,用根ILoader來加載程序集,并解析其依賴。
      3. 調(diào)用程序的主入口點(diǎn)。

      Layer 3:Application host/Application

      如果開發(fā)人員將整個(gè)程序編譯成程序集放在libpath目錄下,那該層就是你的應(yīng)用程序了。使用的時(shí)候,將含有程序入口點(diǎn)的程序集名稱作為[ProgramName]的參數(shù)傳入即可,Layer 2層會(huì)直接調(diào)用該程序集。

      不過,一般其它情況下,都會(huì)使用一個(gè)應(yīng)用程序宿主(Application host)來解析程序的依賴內(nèi)容并啟動(dòng)運(yùn)行程序。Microsoft.Net.ApplicationHost是運(yùn)行環(huán)境提供的應(yīng)用程序宿主,并擁有如下職責(zé):

      1. 解析project.json里定義的各種依賴程序集。
      2. 將一個(gè)ILoader添加到LoaderContainer,以便從各種地方(如源代碼、NuGet、Roslyn等)加載相應(yīng)的程序集。
      3. 調(diào)用程序集的入口點(diǎn),將其作為下一個(gè)參數(shù),傳遞給DNX.exe。

      Layer 4:Application

      這一層,就是開發(fā)人員開發(fā)的程序,其運(yùn)行在應(yīng)用程序宿主之上。

      環(huán)境配置:

      要對(duì)ASP.NET 5程序的運(yùn)行環(huán)境DNX進(jìn)行配置,首先需要安裝并配置DNVM,不同的操作系統(tǒng)安裝DNVM的時(shí)候不太一樣,我們?cè)谶@里大概講解一下。

      Windows安裝命令

      //需要安裝powershell 3.0
      @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/master/dnvminstall.ps1'))"
      

      Linux

      curl -sSL https://raw.githubusercontent.com/aspnet/Home/master/dnvminstall.sh | sh && source ~/.dnx/dnvm/dnvm.sh
      

      Mac OS X
      在Mac上,首先要安裝Mac系統(tǒng)本身的包管理器Homebrew(http://brew.sh),并使用brew tap aspnet/k命令將指定到ASP.NET5相關(guān)的git存儲(chǔ)庫,比如執(zhí)行如下命令:

      brew install dnvm
      

      該命令將會(huì)自動(dòng)從ttps://www.nuget.org/api/v2上下載最新的DNX,下載以后,如果你的系統(tǒng)不識(shí)別dnvm的話,你還需要再執(zhí)行一下如下語句:

      source dnvm.sh
      

      上述DNVM安裝以后,系統(tǒng)會(huì)將dnvm文件復(fù)制到C:\Program Files\Microsoft DNX\Dnvm目錄,并將C:\Program Files\Microsoft DNX\Dnvm目錄添加到環(huán)境變量中,以便全局都可以使用。注意:這里只是安裝了DNVM,并沒有安裝任何版本的DNX,要安裝DNX的話,可以通過運(yùn)行dnvm或dnvm help來查找相關(guān)的命令,具體命令如下:

      dnvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global] [-proxy <ADDRESS>]
      
      1. 從feed源安裝最新版的DNX
      2. 為已安裝的DNX設(shè)置一個(gè)默認(rèn)(default)別名
      3. 將DNX bin添加的用戶PATH環(huán)境變量中
      4. -g|-global 在全局內(nèi)進(jìn)行安裝(其它用戶也可以使用)
      5. -f|-force 強(qiáng)制更新成最新版(即便最新版已經(jīng)安裝過了)
      6. -proxy 訪問遠(yuǎn)程服務(wù)器的時(shí)候使用特定的地址作為代理
      dnvm install <semver>|<alias>|<nupkg>|latest [-x86][-x64] [-svr50][-svrc50] [-a|-alias <alias>] [-g|-global] [-f|-force]
      
      1. | 從feed源安裝指定的DNX
      2. 從本地文件系統(tǒng)安裝指定的DNX
      3. latest 從feed源安裝最新版的DNX
      4. 將DNX bin添加到當(dāng)前命令行的path環(huán)境變量中
      5. -p|-persistent 將DNX bin添加到系統(tǒng)PATH環(huán)境變量中
      6. -a|-alias 對(duì)指定安裝的DNX設(shè)置別名
      7. -g|-global 在全局內(nèi)進(jìn)行安裝
      8. -f|-force 強(qiáng)制安裝指定的DNX(即便該版本已經(jīng)安裝過了)
      dnvm use <semver>|<alias>|none [-x86][-x64] [-svr50][-svrc50] [-p|-persistent] [-g|-global]
      
      1. | 將DNX bin添加到當(dāng)前命令行的path環(huán)境變量中
      2. none 將DNX bin從當(dāng)前命令行的path環(huán)境變量中刪除
      3. -p|-persistent 將DNX bin添加到系統(tǒng)PATH環(huán)境變量中
      4. -g|-global 組合使用-p將用戶PATH修改成系統(tǒng)PATH
      dnvm list //列出所有已安裝的DNX版本
      dnvm alias //列出所有定義了別名的DNX版本
      dnvm alias <alias> // 顯示定義了別名的DNX名稱
      dnvm alias <alias> <semver> [-x86][-x64] [-svr50][-svrc50] //給指定的DNX版本設(shè)置別名
      

      管理程序集的dnu命令和feed源配置##

      通過dnu命令進(jìn)行包管理的時(shí)候,通常使用如下命令:

      dnu restore:查詢程序的所有依賴包,并將其全部下載到packages目錄,該命令會(huì)下載整個(gè)依賴包以及這些依賴包所依賴的其它依賴包。
      dun install <package id>:該install命令用于下載指定的程序包并添加到程序中。
      dun publish:該命令會(huì)將你的程序打包到一個(gè)可以運(yùn)行的自包含目錄中。其會(huì)創(chuàng)建如下目錄結(jié)構(gòu):

          output/
          output/packages
          outpot/appName
          output/commandName.cmd
      
      1. packages目錄包含所有應(yīng)用程序需要的程序包。
      2. appName目錄包含所有應(yīng)用程序的代碼,如果引用了其它項(xiàng)目,則在引用的其它項(xiàng)目也會(huì)創(chuàng)建各自項(xiàng)目的同級(jí)目錄,即生成的目錄會(huì)和AppName同級(jí)。
      3. publish命令,會(huì)將project.json中的commands節(jié)點(diǎn)中的各種命令,分別生成響應(yīng)的命令行文件,如commands里的web命令,我們就可以通過dnx web(格式:dnx <command>)開運(yùn)行它。

      由于dnu在內(nèi)部使用了Nuget命令,進(jìn)行程序包的管理,所以使用的時(shí)候要正確配置Nuget的feed源,目前ASP.NET 5相關(guān)的包都在myget feed上,所以我們需要添加這個(gè)feed才能正常運(yùn)行。這些配置信息在Windows下的%AppData%\NuGet\NuGet.config(或者*nix下Mono使用的 ~/.config/NuGet/NuGet.config)文件中進(jìn)行管理。示例如下:

      <?xml version="1.0" encoding="utf-8"?>
      <configuration>
        <packageSources>
          <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/api/v2/" />
          <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
        </packageSources>
        <disabledPackageSources />
        <activePackageSource>
          <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
        </activePackageSource>
      </configuration>
      

      在VS2015下,則可以直接通過Tools--> Options--> Nuget Package Manager--> Package Sources來設(shè)置,示例如下圖:

      另外需要注意一下,上述feed的地址是asp.net5的每日構(gòu)建版本,如果你想使用穩(wěn)定的里程碑版(如1.0.0_alpha4),則需要使用如下地址https://www.myget.org/F/aspnetmaster/api/v2/

      Web Server支持

      微軟在實(shí)現(xiàn)DNX的時(shí)候提供了幾種Web服務(wù)器支持,具體分別如下:

      Microsoft.AspNet.Loader.IIS (Helios)

      該服務(wù)器用于在IIS上加載ASP.NET5程序,以便和IIS進(jìn)程集成,同時(shí)繞過了System.Web從而帶來性能上的提升,可以支持Windows認(rèn)證、靜態(tài)文件訪問等功能。其原理是將IIS與NDX之間做一個(gè)橋接。

      Microsoft.AspNet.Server.WebListener (WebListener)

      該服務(wù)器通過Microsoft.AspNet.Hosting在IIS之外加載程序、服務(wù)、work role等,它直接運(yùn)行在Http.Sys核心驅(qū)動(dòng)之上,僅消費(fèi)少許性能,從中可以受益于端口共享,Windows認(rèn)證等功能。

      Microsoft.AspNet.Server.Kestrel (Kestrel)

      該服務(wù)器通過Microsoft.AspNet.Server.Kestrel在IIS之外加載運(yùn)行,其設(shè)計(jì)被用于跨平臺(tái)的Web服務(wù)(Windows、Mac、Linux等等)。

      參考內(nèi)容

      1. https://github.com/aspnet/Home/wiki/DNX-structure
      2. https://github.com/aspnet/Home/wiki/Command-Line
      3. https://github.com/aspnet/Home/wiki/Version-Manager
      4. https://github.com/aspnet/Home/wiki/Package-Manager

      同步與推薦

      本文已同步至目錄索引:解讀ASP.NET 5 & MVC6系列

      主站蜘蛛池模板: 午夜综合网| 久久99精品中文字幕在| 成年女人黄小视频| 色老头亚洲成人免费影院| 又长又粗又爽又高潮的视频| 无码囯产精品一区二区免费| 成人网站免费观看永久视频下载 | 国产精品无码素人福利不卡| 国产精品免费视频不卡| 中文字幕 日韩 人妻 无码| 国产在线无遮挡免费观看| 精品一区二区三区波多野结衣| 久久综合激情网| 国产精品久久精品| 亚洲人成小说网站色在线 | 漂亮人妻中文字幕丝袜| 都兰县| 国产精品老熟女免费视频| 肥乡县| 国99久9在线 | 免费| 少妇高潮尖叫黑人激情在线| 国产精品久久久久久无毒不卡| 久久国产精品无码网站| 国产成人高清亚洲综合| 国产区成人精品视频| 久久99精品中文字幕在| 国产欧亚州美日韩综合区| 欧美精品在线观看视频| 亚洲少妇人妻无码视频| 久久久国产精品樱花网站| 午夜免费无码福利视频麻豆| 视频一区二区不中文字幕| 国产AV无码专区亚洲AV漫画| 国产欧美日韩亚洲一区二区三区 | 国产偷人妻精品一区二区在线 | 亚洲天堂av日韩精品| 亚洲一区av无码少妇电影| japanese边做边乳喷| av综合网男人的天堂| 激情的视频一区二区三区| 国产片AV国语在线观看手机版|