.NET Framework 4.5.1 已正式开源

2023/7/6 10:13:31

2014年02月24日,微软在官方网站上正式发布了.NET Reference Source 4.5.1 源码,该源码作为最新.NET框架的参考代码,您可以通过该代码深入学些.NET框架的实现,同时可以调试.NET框架的源码,本博文将通过在线浏览、离线下载、项目调试和注意事项多个方面全面认识.NET开源代码。

提供权威在线代码浏览,便捷搜索阅读,各种搜索技巧。

如果您想看看.NET某个类型的具体实现源码,可在线访问网站(http://referencesource.microsoft.com/ )进行预览代码,该预览功能提供强大的智能搜索功能,同时针对这些源码提供文档视图、项目视图和命名空间视图三种预览方式,方便在线阅读.NET代码,在预览的同时,可点击代码中任何一个类型,导航到该类型的定义,这正如在VS中按F12转到定义一样,方便您在代码之间跳转查看。

可下载.NET框架源码,通过VS2013直接打开解决方案

如果您平时非常喜欢通过VS2013阅读和查看代码,您可以直接点击右上角的下载链接(Download),本离线压缩包53MB大小,解压后直接运行名为ndp的解决方案,本解决方案包含77个项目,但这些项目都无法通过编译,这是因为微软没有开放一些底层基础库,但这完全不影响您通过VS2013进行阅读和学习.NET框架源码。

通过Visual Studio2013 调试和跟踪.NET框架源码

如果您希望调试(F5)自己程序时,单步(F11)跟踪到.NET源码,由于离线下载的.NET源码没有PDB文件,所以无法进行离线调试,但微软的在线符号服务器将帮助您完成这个任务,您只需要针对VS2013作如下的配置,即可进行.NET框架调试。具体配置设置如下: 1、通过[工具]---[选项]---[调试]---[常规] 进入如下界面。 2、取消[启动仅我的代码] 3、勾选[启用.NET Framework 源代码但不执行] 4、取消[逐过程执行属性和运算符(仅限托管)] 5、勾选[启用源服务器支持] 6、取消[要求源文件与原始版本完全匹配] 7、点击[确定]保存,提示正在下载公共符号,这个过程一般需要几分钟。

DebugNetFramework

经过上面的配置后,当您逐步(F11)进行代码调试时,要进入系统程序集时,VS2013将自动导航到.NET框架开源代码,同时这些开源代码支持变量监视、跟踪调试和堆栈查看,正如您看到的那样,调试.NET框架代码和调试自己代码变得一样简单,但这里要注意的是当您通过F11单步跟踪调试时,VS2013会根据你导航到的类型按需加载框架源码,如果网速过慢,可能有卡顿问题,不过按需加载后的.NET框架代码会缓存在本地(主要包括符合和源码),下次调试时直接读取缓存源码,极大提高了调试速度。

在调试时由于代码优化而导致的几个问题

当你在使用调试.NET源代码的时,有时会发现很多变量不能在调试时查看和监视,这是因为源代码服务器上提供的代码默认是最终被优化过的(optimized )代码。有些变量的值虽然在调试时无法查看,但不会阻断单步执行,大部分情况下您可能不会查看这些变量。但如果您真的需查看,这里还是有一个办法的。你需要设置CLR运行时不通过代码优化来pre-JIT加载镜像,将下面的代码复制到记事本,并另存为NotOptimizedDev.cmd批处理格式的文件,当我需要禁止CLR的优化功能时,通过单击这个文件启动VS2013即可。

set COMPLUS_ZapDisable=1 cd /c "%ProgramFiles%\Microsoft Visual Studio 12.0\Common7\ide" start devenv.exe exit

不过,这里需要说明的是,当通过禁止优化来启动VS2013时,需要右击项目文件---[属性]---[调试]---取消[启用Visual Studio承载进程],现在,你可以查看所有成员变量的值了。

附:对您来说比较有用的资源和参考链接

在线预览.NET Framework 4.5.1源码:http://referencesource.microsoft.com/ 如何智能搜索和查看代码:http://referencesource.microsoft.com/overview.html 在线预览代码的技巧视频:http://channel9.msdn.com/Series/NET-Framework/How-to-browse-the-NET-Reference-Source 配置visual studio 2013 调试.NET源码:http://referencesource.microsoft.com/setup.html

感谢阅读本文,希望对您有所帮助,写作不易,转载文章请留出处,多多支持,谢谢合作!