當前位置:首頁 » 操作系統 » aspnetmvc框架源碼

aspnetmvc框架源碼

發布時間: 2023-04-12 22:53:19

『壹』 net開源項目整理

整理一些平時收藏和應用的開源代碼,方便自己學習和查閱

1.應用

nopcommerce ,開源電商網站,開發環境asp.net mvc(未支持.net core),使用技術(autofac,ef,頁面插件等)

https://github.com/nopSolutions/nopCommerce

OrchardCMS ,內容管理網站

https://github.com/OrchardCMS/Orchard(.net版本)

https://github.com/OrchardCMS/Orchard2(.net core版本)

ABP(aspnetboilerplate) ,提供一系列工具用於web應用創建,支持 ASP.NET Core, ASP.NET MVC & Web API,也提供了web應用的模板

https://github.com/aspnetboilerplate/aspnetboilerplate(.net core 版本,tag分支有支持.net版本的)

IdentityServer ,用戶授權網站(支持openid和OAuth 2.0),可用於單點登錄和第三方授權等

https://github.com/IdentityServer/IdentityServer3(.net版本)

https://github.com/IdentityServer/IdentityServer4(.net core版本)

eShopOnContainers 微軟提供的微服務實例

https://github.com/dotnet-architecture/eShopOnContainers

PetShop 三層架構經典例子,用於新手學習,不過aspx有點過時了

https://github.com/songhhwd01/PetShop

BlogEngine.NET 博客網站,也是aspx

https://github.com/rxtur/BlogEngine.NET

2.組件

Lucene.Net 全文檢索開發組件

https://github.com/apache/lucenenet

ServiceStack 半開源,用於創建web服務

https://github.com/ServiceStack/ServiceStack

MassTransit 可用於創建基於消息的服務和應用,依賴於RabbitMQ

https://github.com/MassTransit/MassTransit

stateless 簡單的工作流開發組件,不支持在線定製工作流

https://github.com/dotnet-state-machine/stateless

Hangfire 任務調度開發利器

https://github.com/HangfireIO/Hangfire

Jwt.Net 用於生成JWT (JSON Web Token) 和JWT校驗

https://github.com/jwt-dotnet/jwt

npoi 支持office文件的讀寫

https://github.com/tonyqus/npoi

StackExchange.Redis Redis的.net客戶端

https://github.com/StackExchange/StackExchange.Redis

CacheManager 用於緩存的管理,支持Redis.Memcached,couchbase等

https://github.com/MichaCo/CacheManager

Autofac Ioc組件,用於依賴注入

https://github.com/autofac/Autofac

LightGBM 用於機器學習

https://github.com/Microsoft/LightGBM

3.框架

asp.net mvc

https://github.com/aspnet/Mvc

Nancy 類似asp.net mvc,web開發框架

https://github.com/NancyFx/Nancy

4.其他

dotnet core 主頁 ,提供dotnet core相關知識的索引和例子,方便快速入門

https://github.com/dotnet/core

.net源碼

https://github.com/Microsoft/referencesource

『貳』 基於ASP.NET MVC框架開發Web論壇應用程序[1]

我想通過本系列文章從頭到尾構建一個完整的ASP NET MVC論壇應用程序 最終的目的是探討和推動使用ASP NET MVC框架構建應用程序的最佳實踐友局

簡介

在本篇中 我想先從全局方面介紹一下論壇應用程序的總體目標 在本篇中 我將討論一下避免代碼壞味道的重要性 還將討論如何利用軟體設計原則和模式來幫助你編寫適合未來改變的富有彈性的代碼 最後 我還將論證一下為什麼我選擇使用測試驅動開發方式構建本系列文章中的論壇應用程序

什麼樣的軟體是好的軟體

我不想僅僅為了構建論壇應用程序而任意構建此論壇應用程序 我的目標是盡可能構建最棒的論壇應用程序

這個目標立即引發這樣一個問題 什麼樣的軟體是好的軟體?是什麼導致一個應用程序比另一個應用程序更好一些或更差一些呢?在事先沒有一個關於 好軟體 的定義之前 我無法聲明我構建了一個完美的論壇應用程序

因此 下面是我對於 好軟體 的定義

好軟體是設計得易於修改的軟體

存在多種原因可能需要你改變軟體

)你可能需要在一個現有軟體上添加新的特徵 )你可能需要修改一個現有軟體中的錯誤 )你可能需要優化現有軟體 )你可能需要改進現有軟體的設計

一般說來 設計糟糕的軟體是難於改變的 有些軟體設計得如此糟糕 以致於每個人都害怕碰一碰它 我們大家應該都使用過設計得糟糕的軟體 當軟體不好時 你很希望它乾脆走開 甚至如果有機會的話 你可能想從頭開始重新編寫這款軟體

避免代碼壞味道

Robert和Micah Martin把糟糕的軟體部分描述為代碼壞味道 下列代碼壞味道意味著此軟體的書寫是相當糟糕的

)僵化性(Rigidity)—僵化的軟體是這樣的軟體 當你在某個位置作一改動時即要求對系統作出相應的一系列的更改 )脆弱性(Fragility)—脆弱的軟體是這樣的軟體 你在某個好鋒讓位置作一改動時即打斷另外多處的正常運行 )不必要的復雜性—不必要的復雜軟體是指過度設計的軟體 其目的是為了處理任何可能的改變 )不必要的重復—不必要的重復軟體中包含大量的重復性代碼 )晦澀性—晦澀的軟體是指難於理解的軟體

【注意】上述這些代碼味道在Micah和Robert Martin的著名《Agile Principles Patterns and Practices in C#》中得到充分的描述 在此 強烈建議讀者讀一下這本書 注意 上述這些代碼味道都與所有的代碼改變相關聯 每一個這些代碼味道都將妨礙代碼的改變

軟體設計原則

遵循良好的軟體設計原則 將有助於編寫軟體易於適應未來更改的軟體 軟體設計原則有若干 也不盡相同 例如 Cunningham和Cunningham Wiki描述面向對象設計的 個原則 //c /cgi/wiki?

其中提到的面向對象設計的前五個原則與Robert Martin及他的兒子Micah Martin編著的《Agile Principles Patterns and Practices in C#》中所基激主張的軟體設計原則是一致的 此外 Robert Martin還在Object Mentor開辟的博客上討論了這些原則 // objectmentor /resources/publishedArticles

此外 我還發現有另外兩本書中也提供了有關軟體設計原則的極其有用的信息 第一本是Eric Freeman Elisabeth Freeman Kathy Sierra Bert Bates編著的《Head First Design Patterns》 第二本是Brett McLaughlin Gary Pollice和David West編著的《Head First Object Oriented Analysis and Design》 盡管這些書所討論的原則與Robert Martin的提法並不十分相同 但是它們卻十分相近

lishixin/Article/program/net/201311/14493

『叄』 asp.net 4.0 與asp.net 3.5的MVC有什麼明顯區別

4.0中你可以使用更多新特性,

在ASP.NET MVC的源碼中提供了對4.0的一些擴展,這在3.5中是沒有辦法用的
比如可選參數的Helper、支持dynamic的ViewPage:DynamicViewPage 、一些新的驗證Datameta

這些特性在Microsoft.Web.Mvc.AspNet4.dll中

『肆』 ASP.NET MVC 4框架揭秘:基於IoC的ControllerFactory(1)[1]

基於IoC的ControllerFactory( )

ASP NET MVC的Controller激活系統最終通過ControllerFactory來創建目標Controller對象 要將IoC引入ASP NET MVC並通過對應的IoC容器實現對目標Controller的激活 我們很自然地會想到自定義一個基於IoC的ControllerFactory

對於自定義ControllerFactory 可以直接實現IControllerFactory介面創建一個全新的ControllerFactory類型 這需要實現包括Controller類型的解析 Controller實例的創建與釋放以及會話狀態行為選項的獲取在內的所有功能 一般來說 Controller實例的創建才需要IoC容器的控制 為了避免重新實現其他的功能 可以直接繼承DefaultControllerFactory 重寫Controller實例創建的邏輯

實例演示 創建基於Unity的ControllerFactory(S )

嫌衡禪現在我們通過一個簡單的實例演示如何通過自定義ControllerFactory利用Unity進行Controller的激活 為了避免針對Controller類型解析 會話狀態行為選項的獲取和對Controller對象的釋放邏輯的重復定義 我芹塵們直接繼承DefaultControllerFactory 將該自定義ControllerFactory命名為UnityControllerFactory 如下面的代碼片段所示 UnityControllerFactory僅僅重寫了受保護的虛方法GetControllerInstance 將成功解析的Controller類型作為調用UnityContainer的Resolve方法的參數 而返回值就是需要被激活的Controller實例

public class UnityControllerFactory: DefaultControllerFactory

{

public IUnityContainer UnityContainer { get; private set; }

public UnityControllerFactory(IUnityContainer unityContainer)

{

this UnityContainer = unityContainer;

攔桐}

protected override IController GetControllerInstance(

RequestContext requestContext Type controllerType)

{

if (null == controllerType)

{

return null;

}

return (IController)this UnityContainer Resolve(controllerType)

}

}

整個自定義的UnityControllerFactory就這么簡單 為了演示IoC在它身上的體現 我們在一個簡單的ASP MVC實例中來使用它 我們沿用在第 章 URL路由 中使用過的關於 員工管理 的場景 如圖 所示 本實例由兩個頁面(對應著兩個View)組成 一個用於顯示員工列表 另一個用於顯示基於某個員工的詳細信息

圖 員工列表和員工詳細信息頁面

lishixin/Article/program/net/201311/16073

『伍』 ASP.Net MVC框架配置與分析

前幾年的時候ASP Net就有MVC的概念 實際上就是我們熟悉的WebForm開發模型 Model層與視圖無關 並且只與資料庫相關 偽代碼 pulic class Model{pulic DataSet ds(){//資料庫庫取數據伍凳頃return ds;}} Controller實際上就是我們熟悉的Default aspx cs文件 繼承自System Web UI Page 類的文件 View就粗並是aspx文件了而今 微軟推出了新的MVC開發框架 也就是Microsoft ASP NET Extensions 可以從這里下載 a a bc d bbc df /ASPNetExt exe當然 安裝之前必須安裝VS 安裝完後可以在創建項目的地方增加以下兩種項目 一種是 ASP NET MVC Web Application and Test 會同時創建MVC項目和一個測試項目 一個是ASP NET MVC Web Application 只會純粹的建立MVC項目 而在項目中引用新文件的時候 也會增加MVC的頁面 在創建MVC項目以後 會增加以下文件

訪問的機制是通過URL重寫實現的 因此 你需要設置IIS映射 MVC是通過HttpMole進行地址重寫的

< Moles > < addname = ScriptMole type = System Web Handlers ScriptMole System Web Extensions Version= Culture=neutral PublicKeyToken= BF AD E /> < addname = DynamicDataMole type = System Web DynamicData DynamicDataHttpMole System Web Extensions Version= Culture=neutral PublicKeyToken= BF AD E /> < addname = UrlRoutingMole type = System Web Mvc UrlRoutingMole System Web Extensions Version= Culture=neutral PublicKeyToken= BF AD E /> </ Moles >

而在Global asax cs中設置了映射關系//設置Url重寫映射//URL格式設置了訪問的為controller(這里是Home) action對應HomeController里的方法RouteTable Routes Add(new Route{Url = [controller]/[action]/[id] Defaults = new { action = Index id = (string)null } RouteHandler = typeof(MvcRouteHandler)});

//設置默認訪問地址 因此主目錄下看似無用的Default aspx不能刪除掉//controller= Home 設置的是訪問的路徑 這里對應上圖中的Home目錄 也對應了HomeController的類名//action是對應腔陸HomeController cs類中的Index方法 RouteTable Routes Add(new Route{Url = Default aspx Defaults = new { controller = Home action = Index id = (string)null } RouteHandler = typeof(MvcRouteHandler)});HomeController cs代碼 public class HomeController : Controller{[ControllerAction]public void Index(){RenderView( Index );}

[ControllerAction]public void About(){RenderView( About );}}在HomeController中找到要訪問的頁面最後要說明的是Html ActionLink( About Us About Test )方法 能夠實現自動鏈接處理 參數 是 鏈接顯示的文字

參數 是 要訪問的文件參數 是 訪問的目錄 盡管參數名是controllerName lishixin/Article/program/net/201311/11587

『陸』 詳解Spring mvc工作原理及源碼分析

Model 模型層 (javaBean組件 = 領域模型(javaBean) + 業務層 + 持久層)

View 視圖層( html、jsp…)

Controller 控制層(委託模型層進行數據處理)

springmvc是一個web層mvc框架,類似struts2。

springmvc是spring的部分,其實就是spring在原有基礎上,又提供了web應用的mvc模塊。

實現機制:

struts2是基於過濾器實現的。

springmvc是基於servlet實現的。

運行速度:

因為過濾器底層是servlet,所以springmvc的運行速度會稍微比structs2快。

struts2是多例的

springmvc單例的

參數封裝:

struts2參數封裝是基於屬性進行封裝。

springmvc是基於方法封裝。顆粒度更細。

⑴ 用戶發送請求至DispatcherServlet。

⑵ DispatcherServlet收到請求調用HandlerMapping查詢具體的Handler。

⑶ HandlerMapping找到具體的處理器(具體配置的是哪個處理器的實現類),生成處理器對象及處理器攔截器(HandlerExcutorChain包含了Handler以及攔截器集合)返回給DispatcherServlet。

⑷ DispatcherServlet接收到HandlerMapping返回的HandlerExcutorChain後,調用HandlerAdapter請求執行具體的Handler(Controller)。

⑸ HandlerAdapter經過適配調用具體的Handler(Controller即後端控制器)。

⑹ Controller執行完成返回ModelAndView(其中包含邏輯視圖和數據)給HandlerAdaptor。

⑺ HandlerAdaptor再將ModelAndView返回給DispatcherServlet。

⑻ DispatcherServlet請求視圖解析器ViewReslover解析ModelAndView。

⑼ ViewReslover解析後返回具體View(物理視圖)到DispatcherServlet。

⑽ DispatcherServlet請求渲染視圖(即將模型數據填充至視圖中) 根據View進行渲染視圖。

⑾ 將渲染後的視圖返回給DispatcherServlet。

⑿ DispatcherServlet將響應結果返回給用戶。

(1)前端控制器DispatcherServlet(配置即可)

功能:中央處理器,接收請求,自己不做任何處理,而是將請求發送給其他組件進行處理。DispatcherServlet 是整個流程的控制中心。

(2)處理器映射器HandlerMapping(配置即可)

功能:根據DispatcherServlet發送的url請求路徑查找Handler

常見的處理器映射器:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping,

,(不建議使用)

(3)處理器適配器HandlerAdapter(配置即可)

功能:按照特定規則(HandlerAdapter要求的規則)去執行Handler。

通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展多個適配器對更多類型的處理器進行執行。

常見的處理器適配器:HttpRequestHandlerAdapter,,

(4)處理器Handler即Controller(程序猿編寫)

功能:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器才可以去正確執行Handler。

(5)視圖解析器ViewReslover(配置即可)

功能:進行視圖解析,根據邏輯視圖名解析成真正的視圖。

ViewResolver負責將處理結果生成View視圖,ViewResolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。

springmvc框架提供了多種View視圖類型,如:jstlView、freemarkerView、pdfView...

(6)視圖View(程序猿編寫)

View是一個介面,實現類支持不同的View類型(jsp、freemarker、pdf...)

引入相關依賴:spring的基本包、springmvc需要的spring-webmvc,日誌相關的slf4j-log4j12,jsp相關的jstl、servlet-api、jsp-api。

因為DispatcherServlet本身就是一個Servlet,所以需要在web.xml配置。

一、使用默認載入springmvc配置文件的方式,必須按照以下規范:

①命名規則:-servlet.xml ====> springmvc-servlet.xml

②路徑規則:-servlet.xml必須放在WEB-INF下邊

二、如果要不按照默認載入位置,則需要在web.xml中通過標簽來指定springmvc配置文件的載入路徑,如上圖所示。

將自定義的 Controller 處理器配置到 spring 容器中交由 spring 容器來管理,因為這里的 springmvc.xml 配置文件中處理器映射器配置的是 BeanNameUrlHandlerMapping ,根據名字可知這個處理器映射器是根據 bean (自定義Controller) 的 name 屬性值url去尋找執行類 Handler(Controller) , 所以bean的name屬性值即是要和用戶發送的請求路徑匹配的 url 。

根據視圖解析路徑:WEB-INF/jsps/index.jsp

功能:根據bean(自定義Controller)的name屬性的url去尋找執行類Controller。

功能:自定義的處理器(Controller)實現了Controller介面時,適配器就會執行Controller的具體方法。

會自動判斷自定義的處理器(Controller)是否實現了Controller介面,如果是,它將會自動調用處理器的handleRequest方法。

Controller介面中有一個方法叫handleRequest,也就是處理器方法。

因此,自定義的Controller要想被調用就必須實現Controller介面,重寫Controller介面中的處理器方法。

『柒』 ASP.NET MVC 4框架:ASP.NET MVC上的Web應用

建立在 迷你版 ASP NET MVC上的Web應用

在正式介紹我們自己創建的 迷你版 ASP NET MVC的實現原理之前 不妨來看看建立在該框架之上的Web應用如何定義 通過Visual Studio創建一個空的ASP NET Web應用(注意不是ASP NET MVC應用)並不會引用System Web Mvc dll這個程序集 所以在接下來的程序中看到的所謂MVC的組件都是我們自行定義的

首先定義了如下一個SimpleModel類型 它表示最終需要綁定到View上的數據 為了驗證針對Controller和Action的解析機制 SimpleModel定義的兩個屬性分別表示當前請求的目標Controller和Action

public class SimpleModel

{

public string Controller { get; set; }

public string Action { get; set; }

}

與真正的ASP NET MVC應用開發一樣 我們需要定義Controller類 按照約定的命名方式(以字元 Controller 作為後綴) 我們定義了如下一個HomeController HomeController實現的抽象類型ControllerBase是我們自行定義的 以自定義的ActionResult作為返回類型的Index方法表示Controller的Action 它接受一個SimpleModel類型的對象作為參數 該Action方法返回的ActionResult是一個RawContextResult對象 顧名思義 RawContextResult就是將指定的內容進行原樣返回 在這里我們將作為參數的SimpleModel對象的Controller和Action屬性顯示出來

public class HomeController: ControllerBase

{

public ActionResult Index(SimpleModel model)

{

string content = string Format( Controller: { }<br/>Action:{ }

model Controller model Action)

return new RawContentResult(content)

}

}

ASP NET MVC根據請求地址來解析出用於處理該請求的Controller的類型和Action方法名稱 具體來說 我們預注冊一些包含Controller和Action名稱作為佔位符的(相對)地址模板 如果請求地址符合相應地址模板的模式 Controller和Action名稱就可以正確地解析出來 和ASP NET MVC應用類似 我們在Global asax中注冊了如下一個地址讓脊模板({controller}/{action}) 我們還注冊了一個用於創建Controller對象的工廠 RouteTable ControllerBuilder和DefaultControllerFactory都是我們自定義的類型

public class Global : System Web HttpApplication

{

protected void Application_Start(object sender EventArgs e)

{

RouteTable Routes Add( default

new Route{Url = {controller}/{action} })

ControllerBuilder Current SetControllerFactory(

new DefaultControllerFactory())

}

}

正如上洞滑旅面所說的 ASP NET MVC是通過一個自定義的HttpMole實現的 在這個 迷你版 ASP NET MVC框架中我納凳們也將其起名為UrlRoutingMole 在運行Web應用之前 我們需要通過配置對該自定義HttpMole進行注冊 下面是相關的配置

<configuration>

<system webServer>

<moles>

<add name= UrlRoutingMole

type= WebApp UrlRoutingMole WebApp />

</moles>

</system webServer>

</configuration>

到目前為止 所有的編程和配置工作已經完成 為了讓定義在HomeController中的Action方法Index來處理針對該Web應用的訪問請求 我們需要指定與之匹配的地址(符合定義在注冊地址模板的URL模式) 如圖 所示 由於在瀏覽器中輸入地址(//…/Home/Index)正好對應著HomeController的Action方法Index 所以對應的方法會被執行 而執行的結果就是將當前請求的目標Controller和Action的名稱顯示出來 (S )

圖 採用符合注冊的路由地址模板的地址訪問Web應用

上面演示了如何在我們自己創建的 迷你版 ASP NET MVC框架中創建一個Web應用 從中可以看到和創建一個真正的ASP NET MVC應用別無二致 接下來我們就來逐步地分析這個自定義的ASP NET MVC框架是如何建立起來的 而它也代表了真正的ASP NET MVC框架的工作原理

返回目錄 ASP NET MVC 框架揭秘

編輯推薦

ASP NET開發培訓視頻教程

Microsoft NET框架程序設計視頻教程

Java程序性能優化 讓你的Java程序更快 更穩定

Visual C++音頻/視頻技術開發與實戰

lishixin/Article/program/net/201311/16113

『捌』 ASP.NET MVC 4框架揭秘:Controller(3)

Controller( )

雖然抽象類中定義了一個表示當前HttpResponse的屬性Response 但是當BeginExecute方法執行的時候該屬性尚未初始化 所以上面代碼中使用的Response屬性是我們自行定義的 運行該程序後會在瀏覽器中呈現出兆襪如圖 所示的輸出結果 從輸出方法的調用順序中不難看出在默認的情況下Controller是以非同步的方式執行的 (S )

圖 Controller在默認情況下的非同步執行方式

現在按照如下的方式族睜激重寫虛屬性DisableAsyncSupport 使它直接返回True以關閉對Controller非同步執行的支持

public class HomeController : Controller

{

//其他成員

protected override bool DisableAsyncSupport

{

get{return true;}

}

}

再早鬧次執行我們的程序將會得到如圖 所示的輸出結果 可以看出由於HomeController間接地實現了IAsyncController介面 Controller的執行總是以調用BeginExecute/EndExecute方法的方式來執行 但是由於DisableAsyncSupport屬性被設置為True BeginExecute方法內部會以同步的方式調用Execute/ExecuteCore方法 (S )

圖 Controller在DisableAsyncSupport

屬性為True的情況下的同步執行方式

ASP NET MVC應用編程介面中還定義了一個System Web Mvc AsyncController類型 從名稱上看 AsyncController是一個基於非同步的Controller 但是這里的非同步並不是指Controller的非同步執行 而是Action方法的非同步執行 從如下的代碼片段中可以看出 這個直接繼承自抽象類Controller的AsyncController是一個 空 類型(沒有額外定義和重寫基類的類型成員) 在上一個版本中 以XxxAsync/XxxCompleted形式定義的非同步Action方法均定義在繼承自AsyncController的Controller類型中 考慮到向後兼容性 AsyncController在新的版本中保留下來

public abstract class AsyncController : Controller

{}

只有以傳統方式(XxxAsync/XxxCompleted)定義的非同步Action方法才需要定義在AsyncController中 ASP NET MVC 提供了新的非同步Action方法定義方式 使我們可以通過一個返回類型為Task的方法來定義以非同步方式執行的Action 這樣的Action方法不需要定義在AsyncController中

返回目錄 ASP NET MVC 框架揭秘

編輯推薦

ASP NET開發培訓視頻教程

Microsoft NET框架程序設計視頻教程

Java程序性能優化 讓你的Java程序更快 更穩定

lishixin/Article/program/net/201311/16099

『玖』 asp.net mvc是什麼

MVC架構是"Model-View-Controller"的縮寫,中文翻譯為"模型-視圖-控制器"。
網路已經有很好的說明了
http://ke..com/view/739359.htm?fr=ala0_1_1

ASP.NET的Model還可以分成 BLL -> DAL
還有LZ說的是ASP.NET的MVC 不是JAVA的 大家都知道asp.net是事件驅動機制為主的
但這種機制會有很多壞處 例如運行速度慢(相對) 不得不為了控制刷新而參入各種技術(如AJAX) ASP.NET的MVC 用微軟的話說 就是摒棄了事件機制 摒棄了runat="server"控制項 其中利弊總之眾說紛紜 不過.NET專業的各位可以在JAVA的各位面前自豪的說:"我們的MVC性能比JAVA還好!"

自己寫的 有點慢了哈哈 已經有人貼了一大片

http://e.codepub.com/2009/0422/3206.php
再給LZ貼一個快速入門 可以更詳細的了解一下 並動手試試沒有aspx.cs的asp.net吧 :D

『拾』 如何調試MVC4的代碼

下載鄭並畢了 http //aspnetwebstack codeplex com/SourceControl/list/changesets 這上面
.NET 4.0 RTM的源碼,

裝了一個git,然後下載就可以了

git clone https //git01 codeplex com/aspnetwebstack.git

時間稍微長了點兒,半個小時吧;

然後裡面src全是MVC4的源碼(其實很大一部分都在裡面了)

解決反感是runtime.sln的,打開之後,在裡面新建一個MVC4的項目,

這里有個問題,我下載的MVC4,在
system.web.mvc項目里Properties\CommonAssembley.cs里,全是5.0.0.0的版本號,

我把他改成了5.0.0.1

#if
ASPNETMVC [assembly: AssemblyVersion("5.0.0.1")] [assembly:
AssemblyFileVersion("5.0.0.1")] [assembly: AssemblyProct("Microsoft ASP.NET
MVC")] #elif ASPNETWEBPAGES

然後修改根目錄下的 web.config

<appSettings>

<add
key="webpages:Version" value="3.0.0.0" />

<add key="webpages:Enabled" value="false" />

<add key="PreserveLoginUrl" value="true" />

<add key="ClientValidationEnabled" value="true" />

<add key="UnobtrusiveJavaScriptEnabled" value="true" />

</appSettings>
這里之所以改成3.0.0.0的原因,是因為在我下載的源碼里,他的版本號喊芹就是3.0,

<runtime>

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<dependentAssembly>

<assemblyIdentity name="System.Web.Helpers"
publicKeyToken="31bf3856ad364e35" />

<bindingRedirect oldVersion="1.0.0.0-2.0.0.0"
newVersion="3.0.0.0" />

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="System.Web.Mvc"
publicKeyToken="31bf3856ad364e35" />

<bindingRedirect
oldVersion="1.0.0.0-4.0.0.0" newVersion="5.0.0.1" />

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="System.Web.WebPages"
publicKeyToken="31bf3856ad364e35" />

<bindingRedirect oldVersion="1.0.0.0-2.0.0.0"
newVersion="3.0.0.0" />

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="EntityFramework"
publicKeyToken="b77a5c561934e089" />

<bindingRedirect oldVersion="1.0.0.0-5.0.0.0"
newVersion="5.0.0.0"蔽如 />

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="WebGrease"
publicKeyToken="31bf3856ad364e35" />

<bindingRedirect oldVersion="1.0.0.0-1.3.0.0"
newVersion="1.3.0.0" />

</dependentAssembly>

</assemblyBinding>

</runtime> 這里的改成了我自己的版本號

然後修改view下面的web.config

<configSections>

<sectionGroup name="system.web.webPages.razor"
type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35">

<section name="host"
type="System.Web.WebPages.Razor.Configuration.HostSection,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" requirePermission="false" />

<section name="pages"
type="System.Web.WebPages.Razor.Configuration.RazorPagesSection,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" requirePermission="false" />

</sectionGroup>

</configSections>
這里修改成了3.0,當然具體是什麼,看你自己下載的,但是我覺得大部分應該跟我的是一樣的(環境VS2012,源碼4.0 RTM)

<system.web.webPages.razor>

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,
System.Web.Mvc, Version=5.0.0.1,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

<pages pageBaseType="System.Web.Mvc.WebViewPage">

<namespaces>

<pages

validateRequest="false"

pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
System.Web.Mvc, Version=5.0.0.1,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"

pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc,
Version=5.0.0.1, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"

userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc,
Version=5.0.0.1,
Culture=neutral,
PublicKeyToken=31BF3856AD364E35">

同樣,修改之(具體是不是不修改也成,我就不知道了,我是按照網上的方法改的,最後的地方,會給出連接大家注意學習吧)

這樣,配置文件和MVC代碼中的版本號,就修改完了,

然後打開VS2012的命令行,執行

Run
"sn.exe -Vr *,31BF3856AD364E35" in the Visual Command line (哈哈,你看,我真的是COPY的,原創的東西幾乎沒有)

然後把項目中的system.web.mvc的引用,改到你的MVC4的源碼里的項目,當然,不止這一個,不然會有很多地方報錯的,大致的DLL有 :
system.web.razot; system.web.webpages;system.web.webpages.deployment;
system.web.webpages.razor; 這里不全沒關系,網頁上會明確提示少哪個的.

如果出現了一個類型轉換的錯誤:

用戶代碼未處理
System.InvalidCastException

HResult=-2147467262

Message=[A]System.Web.WebPages.Razor.Configuration.HostSection 無法強制轉換為
[B]System.Web.WebPages.Razor.Configuration.HostSection。類型 A
源自「System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35」(在上下文「Default」中的「C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll」位置處)。類型
B 源自「System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35」(在上下文「Default」中的「C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary
ASP.NET
Files\root\49f25bf0\9ce908d5\assembly\dl3\70f2ab4b\b0630cdc_834fce01\System.Web.WebPages.Razor.dll」位置處)。

Source=System.Web.WebPages.Razor

這個錯誤,就是我為什麼要該system.web.webpages的版本好的原因了; 如果出現其他DLL,大家也可以隨著改一下;

之後,就可以在頁面中隨便加空間,就能看到斷點的執行了,好運;

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:335
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:943
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:739
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:371