当前位置:首页 » 操作系统 » 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 浏览:802
网卡访问 发布:2025-05-18 03:35:04 浏览:510
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:371