自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

VS2013中的MVC5模板部署到mono上的艱辛歷程(附代碼)

開(kāi)發(fā) 后端
在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中的東西。

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

在Xamarin.Studio創(chuàng)建的asp.net項(xiàng)目,部署過(guò)程非常順利,沒(méi)有遇到什么問(wèn)題;但在VS2013中創(chuàng)建的asp.net項(xiàng)目,部署過(guò)程會(huì)有一些波折。現(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)指向的目錄,訪(fǎng)問(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í)候可以正常訪(fǎng)問(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ù)制到本地。

再次訪(fǎng)問(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)了!?。?/p>

最終的代碼在這里。

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

責(zé)任編輯:林師授 來(lái)源: 潘復(fù)哲的博客
相關(guān)推薦

2013-11-13 15:00:30

Visual StudMVC5ASP.NET

2010-10-09 08:41:40

Mono 2.8

2014-08-26 09:22:40

ASP.NET MVCRouting

2013-11-14 09:24:13

Visual Stud微軟Web開(kāi)發(fā)

2014-01-07 14:19:57

CES2014可穿戴設(shè)備智能家居

2009-09-07 16:19:50

CCNA認(rèn)證

2009-12-04 10:43:53

VS部署

2011-01-19 11:17:36

2011-01-27 09:19:14

Mono開(kāi)發(fā)

2025-03-27 03:50:00

DeepSeekLLMLLaMA

2012-04-13 09:42:34

2010-09-30 09:09:56

HTML 5VS2010

2011-04-08 11:03:21

VS2010

2011-10-03 20:23:34

2017-05-23 16:36:06

程序程序員

2024-04-26 08:17:09

GoGoogle項(xiàng)目

2022-07-01 08:26:22

區(qū)塊鏈去中心化以太坊

2024-12-30 09:55:44

2009-06-19 11:28:45

2012-10-10 09:47:30

Office 1.0Office 2013
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)