程序员开发实例大全宝库

网站首页 > 编程文章 正文

作为.Net程序员,你可看过Asp.Net MVC源码?

zazugpt 2024-10-17 18:19:28 编程文章 15 ℃ 0 评论

Asp.Net Mvc5开源已经不是什么新鲜事了,但在国内相关资料甚少。小编特意收集了Mvc5多个版本的源码地址:

1. MVC 5.2.3 RTM = v3.2.3(commit 0e974218e12a)

https://aspnetwebstack.codeplex.com/SourceControl/changeset/view/0e974218e12a

2. MVC 5.2.2 RTM = v3.2.2 (commit 66298100f4e3)

https://aspnetwebstack.codeplex.com/SourceControl/changeset/view/66298100f4e3

3. MVC 5.1.3 RTM = v3.1.3 (commit 0150245a9e34)

https://aspnetwebstack.codeplex.com/SourceControl/changeset/view/0150245a9e34

4. MVC 5.1.1 RTM = v3.1.1 (commit 54866f0d3262)

https://aspnetwebstack.codeplex.com/SourceControl/changeset/view/54866f0d3262

5. MVC 5.0 RTM = v3.0 (commit 39391d3a64d7)

https://aspnetwebstack.codeplex.com/SourceControl/changeset/view/39391d3a64d7

6. MVC 4.0 RTM = v2.0 (commit 89b9166ca722)

https://aspnetwebstack.codeplex.com/SourceControl/changeset/view/89b9166ca722

接下来我们来尝试如何编译调试Mvc的源码。

步骤1:下载MVC源代码

从上面提供的链接中下载源码。

步骤2:从每个项目中删除强名称

.net团队通过一个密钥文件"35MSSharedLib1024.snk"来命名每个MVC相关的程序集,该文件位于工具文件夹中,以防止装配篡改。但是,我们没有私钥,只能直接编译才能延迟签名的所有程序集。不幸的是,延迟签名装配不支持调试功能。所以我们必须逐个禁用项目属性的程序集强名称。

取消签名选项

步骤3:在System.Web.WebPages项目中更改assebmly引用

在System.Web.WebPages项目中,某些类型的类型必须具有访问System.Web.Mvc.dll和System.Web.Helpers.dll的私有成员的权限。在System.Web.WebPages的AssemblyInfo.cs文件中,我们将看到以下行:

[assembly: InternalsVisibleTo("System.Web.Mvc, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]

[assembly: InternalsVisibleTo("System.Web.Helpers, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]

我们应该用这两行代替它:

[assembly: InternalsVisibleTo("System.Web.Mvc")]

[assembly: InternalsVisibleTo("System.Web.Helpers")]

然后我们应该从解决方案中删除WebApiHelpPageVB项目。

至此,我们可以编译整个解决方案,而无需签名。

步骤4:添加测试项目

我们创建一个测试项目如下:

然后通过右键“添加引用”,添加如下项目:

Microsoft.Web.Infrastructure (这个可以通过NuGet安装)

Microsoft.Web.Mvc

System.Web.Mvc

System.Web.Razor

System.Web.WebPages.Deployment

System.Web.WebPages

System.Web.WebPages.Razor

添加完引用后,我们来添加一个 Global.asax文件。

并在Application_Start事件里添加如下代码

RouteTable.Routes.MapRoute("Default", "{controller}/{action}/{id}",

new { controller = "Home", action = "Index", id = UrlParameter.Optional },

new[] { "WebApplication1" }

);

并将Views文件夹下的Web.config 删除版本和公钥信息:

<sectionGroup name="system.web.webPages.razor"

type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor">

<section name="host"

type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor"

requirePermission="false" />

<section name="pages"

type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor"

requirePermission="false" />

</sectionGroup>

最后我们来添加一个控制器:

F5跑起来,大功告成:

好了,小伙伴可慢慢研究源码了,MVC是一个优秀,扩展性很好的一个项目。


小编码字不易,点个赞吧

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表