国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

解讀ASP.NET 5 & MVC6系列(3):項目發(fā)布與部署

2019-11-17 02:06:04
字體:
來源:轉載
供稿:網(wǎng)友

解讀asp.net 5 & MVC6系列(3):項目發(fā)布與部署

2015-05-15 09:14 by 湯姆大叔, ... 閱讀, ... 評論, 收藏, 編輯

本章我們將講解ASP.NET5項目發(fā)布部署相關的內容,示例項目以我們前一章創(chuàng)建的BookStore項目為例。

發(fā)布前的設置

由于新版ASP.NET5支持多版本DNX運行環(huán)境的發(fā)布和部署,所以在部署之前,我們需要設定部署的目標DNX(即之前的KRE)。

步驟:右鍵BookStore項目->屬性->application選項卡,選擇DNX的版本,本例中,選擇dnx-coreclr-win-x64.1.0.0-beta4

PRoject.json文件的commands節(jié)點,我們可以看到,系統(tǒng)默認配置了3個調試命令,分別如下:

命令描述
web啟動WebListener服務,該服務可以讓web程序脫離IIS運行,默認地址是http://localhost:5000。
gen使用該命令可以生成MVC相關的代碼,比如Controller,目前還用不到。
efEntity Framework遷移命令,用于遷移數(shù)據(jù)使用,本例我們還用戶不到。

理論上來說,我們F5運行的時候,應該是啟動web命令,但是在VS2015中,默認的運行環(huán)境依然是IIS Express,所以F5調試的時候,會默認啟動IIS Express。

gen參考:http://m.survivalescaperooms.com/dudu/p/aspnet5-k-gen.html注意:web模式和IIS Express模式的程序運行端口不一樣。

我們先F5調試運行,啟動IIS Express,打開頁面,一切正常。重新選擇默認模擬器環(huán)境為web,再F5運行,這時候發(fā)現(xiàn)彈出了一個命令行窗口,并提示如下文字:

[INFORMATION:Microsoft.NET.Http.Server.WebListener] Start[INFORMATION:Microsoft.NET.Http.Server.WebListener] Listening on prefix: http://localhost:5000/Started

代碼沒有出錯,但是并沒有打開瀏覽器窗口,我們手工打開一個瀏覽器訪問上述網(wǎng)址,即可看到該示例程序的界面,此時說明,該BookStore已經(jīng)成功運行在5000端口了。其實該模式下的瀏覽器自動打開功能默認是關閉的,可以通過如下方式開啟自動打開功能:

步驟:右鍵BookStore項目->屬性->Debug選項卡,勾選Launch Brower復選框,并在輸入框里輸入上述網(wǎng)址即可(此時會在項目的Properties目錄下生成一個debugSettings.json文件來保存上述信息)。

再次F5運行,即可看到自動打開的瀏覽器界面。

應用程序參數(shù)在該Debug選項卡中,我們還看到一個應用程序參數(shù)(Application Arguments)輸入框,該輸入框可以傳入多種參數(shù),這些參數(shù)可以在Startup.cs里,通過ConfigurationAddCommandLine方法進行收集并利用。

環(huán)境變量同理,在Debug選項卡的最下面還有一個環(huán)境變量(Environment Variables)輸入框,可以讓我們在調試的時候自定義一些環(huán)境變量的值(key/value),然后通過ConfigurationAddEnvironmentVariables方法進行收集并利用。

上述參數(shù)和環(huán)境變量的具體使用方式,請參考配置信息管理章節(jié)。

發(fā)布流程分析

在之前的MVC程序中,我們一般都是通過右鍵項目,選擇發(fā)布(Publish)的方式來發(fā)布程序的,這一次我們也來看看這種方式。

首先,右鍵->發(fā)布->Profile(選擇File System)->選擇D:/BookStore->選擇Release/coreclr->下一步,最終點擊發(fā)布。在在Output面板,我們看到出錯了,錯誤信息如下:

正在連接到 D:/Documents/Visual Studio 2015/Projects/BookStore/BookStore/../artifacts/bin/BookStore/Release/Publish...C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v14.0/Web/Microsoft.DNX.Publishing.targets(342,5): 錯誤 : 錯誤: 無法識別規(guī)則“BackupRule”。C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v14.0/Web/Microsoft.DNX.Publishing.targets(342,5): 錯誤 : 錯誤計數(shù): 1。C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v14.0/Web/Microsoft.DNX.Publishing.targets(342,5): 錯誤 : An error occured during publish.The command ["C:/Program Files (x86)/IIS/Microsoft Web Deploy/msdeploy.exe" -source:contentPath='C:/Users/Administrator/AppData/Local/Temp/PublishTemp/' -dest:contentPath='D:/Documents/Visual Studio 2015/Projects/BookStore/artifacts/bin/BookStore/Release/Publish' -verb:sync -enableRule:DoNotDeleteRule -retryAttempts:2 -disablerule:BackupRule  ] exited with code [-1]。

通過查看輸出信息,可以發(fā)現(xiàn),編譯成功,但復制的時候出錯,可能是powershell的問題,所以返回上述步驟,在設置(Settings)選項卡下,將取消發(fā)布腳本(Publish Scripts)下的使用PowerShell腳本發(fā)布的復選框。重新發(fā)布,成功了。

打開發(fā)布目錄D:/BookStore,發(fā)現(xiàn)生成了如下目錄和文件:

目錄或文件描述
approot應用程序目錄
wwwroot靜態(tài)文件目錄
genlinux shell命令文件
gen.cmdcmd命令文件
weblinux shell命令文件
web.cmdcmd命令文件

看到cmd文件的擴展名,我們可以猜想這些命令是用于執(zhí)行相關的命令,比如web.cmd可能就是用于啟動程序的;而非cmd擴展名文件,我們則猜想可能是用于linux/mac運行的命令。

我們來試一下,點擊web.cmd文件,該文件執(zhí)行以后顯示的信息和我們在Debug程序時彈出的信息一樣,通過訪問提示中的網(wǎng)址,我們可以驗證應用程序已經(jīng)正常運行了。這種模式即時我們所說的自宿主(Self-Host)運行模式。

再試一下IIS是否能夠運行該程序,將IIS站點指向到wwwroot目錄,打開網(wǎng)址,也是可以正常訪問的。打開wwwroot文件夾進行查看,靜態(tài)文件一應俱全,但是發(fā)現(xiàn)bin目錄下并沒有我們的項目DLL(BookStore.dll),而是多了一個AspNet.Loader.dll,而且根目錄下還多了一個web.config文件,內容如下:

<?xml version="1.0" encoding="utf-8"?><configuration>  <appSettings>    <add key="bootstrapper-version" value="1.0.0-beta4" />    <add key="runtime-path" value="../approot/packages" />    <add key="dnx-version" value="1.0.0-beta4" />    <add key="dnx-clr" value="coreclr" />    <add key="dnx-app-base" value="../approot/src/BookStore" />  </appSettings></configuration>

通過查詢相關信息(訪問詳情) ,得知AspNet.Loader.dll文件只是一個橋接文件,用于接收IIS轉發(fā)過來的請求,然后將其轉交給dnx進行運行,這里的web.config里的dnx以及項目信息的配置文件是AspNet.Loader.dll在轉交請求時所需要的配置信息。

通過配置文件我們可以看到,這里配置了dnx的類型、版本號,程序集的路徑和app的路徑。打開approot/src/BookStore目錄,我們發(fā)現(xiàn),這里居然都是cs源碼,雖然有個bin目錄,但是里面也沒有dll文件。而且在approot/packages文件夾下,居然有90個程序集文件夾(將近30M文件)。

通過查詢網(wǎng)站的資料得知(這一部分內容,我們在下一節(jié)進行講解),目前真正運行程序的運行環(huán)境是DNX,也被復制到approot/packages/dnx-coreclr-win-x64.1.0.0-beta4目錄中, 而該項目依賴的所有程序集(包括System開頭的)都被復制到該packages目錄下了。目的就是要做到真正的跨平臺運行,也就是說,將這些文件復制到linux系統(tǒng)下,只要有對應版本的KRE(本例中的DNX是Windows版本的)的話,就可以正常運行該程序。

而bin目錄下沒有dll文件,則是使用了微軟最新的動態(tài)編譯技術,即在運行的過程中,自動編譯cs文件,而且一旦修改這些cs文件的話,系統(tǒng)將會自動再次進行編譯。(感覺有點像php等腳本語言了)。雖然動態(tài)編譯很高效,但是還是沒有編譯好的dll高效,所以微軟還提供了一個選項讓開發(fā)人員在調試的時候生成dll文件。具體步驟如下:

右鍵BookStore->屬性->Build選項卡,勾選編譯時生成輸出(Produce outputs on build)復選框。

重新編譯程序,發(fā)現(xiàn)在BookStore/artifacts/bin/BookStore/Debug目錄下的2個DNX版本文件夾下都分別生成了BookStore.dll文件了,而且還順帶了Nuget的spec文件。

如果在發(fā)布的時候也要生成dll文件,則需要在發(fā)布(Publish)設置里進行修改,步驟如下:

右鍵BookStore->發(fā)布(Publish)->Settings選項卡->File Publish Options->勾選Precompile during publishing復選框。

這樣就可以生成響應的dll文件, 但是這些dll文件依然不在wwwroot/bin目錄下,而是在approot/packages/BookStore/1.0.0目錄下,在該目錄下有2個文件夾,分別是libroot,以及相關的Nuget的spec文件,在lib目錄下,生成的是不同dnx版本的dll文件,而root則是類似于之前的web根目錄,因為在該目錄下除了有視圖文件以外,還和以前的結構一樣,保留了bin目錄,并且在bin目錄下的Release文件夾下,也有一份針對不同dnx版本的dll文件副本。

提示:上述選擇中,另外一個Delete all existing files prior to publish也可以勾選上,以便在發(fā)布時將之前發(fā)布版本的所有文件全部清空。

此時,我們通過web.cmd文件或者IIS模式來驗證發(fā)布的文件,經(jīng)驗證,均可以正常運行。再仔細對比兩份不同設在的發(fā)布文件,發(fā)現(xiàn),除了dll文件以外,web.config文件的應用程序路徑也變了,即從原來的:

<add key="kre-app-base" value="../approot/src/BookStore" />

變成了如下版本:

<add key="kre-app-base" value="../approot/packages/BookStore/1.0.0/root" />

而web.cmd文件的內容,也從如下內容:

@"%~dp0approot/packages/dnx-coreclr-win-x64.1.0.0-beta4/bin/dnx.exe" --appbase "%~dp0approot/src/BookStore" Microsoft.Framework.ApplicationHost web %*

變成了如下內容:

@"%~dp0approot/packages/kre-coreclr-win-x64.1.0.0-beta4/bin/dnx.exe" --appbase "%~dp0approot/packages/BookStore/1.0.0/root" Microsoft.Framework.ApplicationHost web %*

上述變化,我們是可以理解的,即將src源碼動態(tài)編譯運行的模式修改為預編譯dll程序集的模式。所以,在這里我們可以看到,在源碼動態(tài)編譯模式下,其發(fā)布后的文件夾結構如下:

//源碼動態(tài)編譯模式wwwroot/bin/Microsoft.AspNet.Loader.IIS.dllwwwroot/Contents/site.CSSwwwroot/Contents/...............................................................................................wwwroot/Scripts/jquery.jswwwroot/Scripts/........................................................................................................................................................approot/src/BootStore/project.jsonapproot/src/BootSt
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天长市| 璧山县| 武山县| 密云县| 渑池县| 宁夏| 永修县| 宜兴市| 房山区| 嘉义市| 宁化县| 桓台县| 南陵县| 宿州市| 句容市| 东丽区| 金川县| 井研县| 伊金霍洛旗| 恩施市| 丘北县| 广平县| 东兴市| 和平县| 武邑县| 高安市| 措美县| 鲜城| 康保县| 尼勒克县| 龙海市| 牡丹江市| 左贡县| 岫岩| 集贤县| 区。| 汕尾市| 连南| 唐山市| 鹤庆县| 京山县|