日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
VS2013中的MVC5模板部署到mono上的艱辛歷程(附代碼)

部署環(huán)境:CentOS7 + Mono 3.10 + Jexus 5.6

創(chuàng)新互聯(lián)公司成立于2013年,先為茂南等服務(wù)建站,茂南等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為茂南企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

在Xamarin.Studio創(chuàng)建的asp.net項(xiàng)目,部署過(guò)程非常順利,沒(méi)有遇到什么問(wèn)題;但在VS2013中創(chuàng)建的asp.net項(xiàng)目,部署過(guò)程會(huì)有一些波折?,F(xiàn)在想想,原因是Xamarin.Studio中的項(xiàng)目模板比較簡(jiǎn)單,只是顯示幾個(gè)文字,并沒(méi)有用到mvc5中的東西。

vs2013新建一個(gè)asp.net的項(xiàng)目(目標(biāo)框架是.net4.5),選擇mvc,并且更改身份驗(yàn)證為不適用身份驗(yàn)證。

編譯,并發(fā)布到j(luò)exus默認(rèn)站點(diǎn)指向的目錄,訪問(wèn)之。報(bào)出的錯(cuò)誤信息如下圖。

根據(jù)異常堆棧信息,應(yīng)該是調(diào)用HtmlHelper的ActionLink方法的時(shí)候,Helper友用到了RouteCollectionExtention的獲取虛擬路徑方法,問(wèn)題就處在這個(gè)方法中。

看提示應(yīng)該是RouteCollection少了AppendTrailingSlash這個(gè)屬性(bool,用來(lái)控制在轉(zhuǎn)換成虛擬路徑的時(shí)候是否在最后添加“/”)。

其實(shí),Asp.net 路由框架的代碼位于System.web.dll中,System.Web.Routing.dll是個(gè)沒(méi)有代碼的空程序集。RouteCollectionExtention是mvc中為了方便使用而對(duì)路由框架中RouteCollection的一系列的擴(kuò)展方法。

打開(kāi)mvc的RouteCollectionExtention源碼(http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/RouteCollectionExtensions.cs),發(fā)現(xiàn)了對(duì)RouteCollection的AppendTrailingSlash調(diào)用。

對(duì)比下.net和mono中的RouteCollection類(lèi),發(fā)現(xiàn)mono中沒(méi)有實(shí)現(xiàn)AppendTrailingSlash這個(gè)屬性,同樣也沒(méi)有LowercaseUrls這個(gè)屬性(代碼地址分別是,.net:http://referencesource.microsoft.com/#System.Web/xsp/system/Web/Routing/RouteCollection.cs#8f054052ef9931ac#references,mono:https://github.com/mono/mono/blob/master/mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs)。

再看一下mono中RouteCollection這個(gè)文件的最后更新時(shí)間,++,兩年前,好吧。

因?yàn)閷傩詿o(wú)法像擴(kuò)展方法一樣擴(kuò)展,而且路由中又沒(méi)有針對(duì)RouteCollection進(jìn)行抽象,都是直接引用的RouteCollection,這個(gè)問(wèn)題我暫時(shí)沒(méi)招了。翻遍了google,只有問(wèn)題,沒(méi)有答案。

只能先繞過(guò)去了,找到View/Share/_Layout.cshtml,注釋掉調(diào)用Html.ActionLink的代碼,重新發(fā)布。

這時(shí)候可以正常訪問(wèn),但頁(yè)面的樣式是亂的,在瀏覽器的開(kāi)發(fā)人員工具中可以看到如下404信息,原因肯定是bundle框架并沒(méi)有起作用。

解決辦法是,找到bin文件夾刪除Microsoft.Web.Infrastructure.dll,因?yàn)閙ono在lib中有關(guān)于這個(gè)程序集的自己的實(shí)現(xiàn),為了開(kāi)發(fā)和部署方便,也可以直接把Microsoft.Web.Infrastructure.dll設(shè)置為不復(fù)制到本地。

再次訪問(wèn),可以看到清新的Bootstrap界面了,只是菜單上哪幾個(gè)倒霉的鏈接被注釋掉了。

以上可知,mono目前對(duì)mvc5的兼容性還不夠好,可能在等vNext不屑于兼容mvc5了吧。

MVC5在mono上顯示幾個(gè)文字還是沒(méi)有問(wèn)題的,但HtmlHelper某些方法因?yàn)殚g接調(diào)用了mono沒(méi)有實(shí)現(xiàn)的路由框架的屬性,所以無(wú)法使用。

RouteCollectionExtention中獲取虛擬路徑的方法是非常重要而且使用頻繁的,為了這個(gè),只能棄用mvc5了,將其降級(jí)為mvc4了。

降級(jí)的過(guò)程是一部血淚史,有血,有淚,有屎。mvc相關(guān)的nuget包主要有:Microsoft Asp.Net MVC、Microsoft Asp.net Web Pages 、Microsoft Asp.net Razor,比較坑爹的是這三個(gè)包的不同版本之間不一定兼容。本來(lái)想是直接在NuGet中引入MVC4就好,但是遇到了各種問(wèn)題,不是這個(gè)包少個(gè)方法就是那個(gè)包少個(gè)方法,最終試了很多種組合也沒(méi)有成功。

最后不得已才用了一個(gè)投機(jī)取巧的方法,先創(chuàng)建一個(gè)mvc4的項(xiàng)目(在vs2013中的創(chuàng)建項(xiàng)目框中展開(kāi)web選中vs2012就可以看到mvc4的模板),然后把vs自動(dòng)創(chuàng)建的mvc4、webPage、razor包,復(fù)制到原解決方案的package目錄下。

在NuGet中依次卸載MVC5、WebPages、Razor,然后添加對(duì)上面復(fù)制過(guò)來(lái)的三個(gè)包中的程序集的引用,這時(shí)在vs2013中編譯運(yùn)行會(huì)遇到下面的異常:

打開(kāi)View文件夾下的Web.config,configSections中依然保留著對(duì)最初的那幾個(gè)程序集的引用,把mvc4項(xiàng)目中的這段配置復(fù)制過(guò)來(lái),編譯運(yùn)行,又看到下面的異常:

找不到System.Web.Helpers命名空間,可以我明明引用了System.Web.Helpers這個(gè)程序集啊,但bin中竟然沒(méi)有System.Web.Helpers.dll。仔細(xì)查看,原來(lái)是沒(méi)有設(shè)置為復(fù)制到本地,相應(yīng)的檢查一下上面手動(dòng)添加的幾個(gè)引用是否都設(shè)置了復(fù)制到本地,再次編譯運(yùn)行,在windows下已經(jīng)可以正常瀏覽了。

把上面layout.cshtml中被注釋掉的調(diào)用Html.ActionLink的代碼解開(kāi)注釋。

編譯運(yùn)行,OK;部署到CentOS上,在bin文件夾中刪除Microsoft.Web.Infrastructure.dll,重啟jexus,瀏覽之,正常顯示,點(diǎn)擊菜單上通過(guò)HtmlHelper生成的幾個(gè)連接,Perfect?。?! 倒霉的菜單又回來(lái)了?。?!

最終的代碼在這里。

原文出自:http://www.cnblogs.com/FuzhePan/p/4053455.html


本文標(biāo)題:VS2013中的MVC5模板部署到mono上的艱辛歷程(附代碼)
轉(zhuǎn)載源于:http://www.5511xx.com/article/dhsjhgh.html