在以前,MS的参考源代码在单步调试时时好用时不好用,最后我找到了原因,那就是如果想用MS的参考源代码进行单步调试,那么你就得想尽办法把系统上的.NET FX降级到RTM版本(卸载各种相关补丁),今天我收到了MS的User Voice发来的邮件,告诉我参考源代码已经升级,不仅RTM版本可用,各个更新后的版本也可用(虽然仅仅针对.NET FX 4.5.1)。
OK,打开 http://blogs.msdn.com/b/dotnet/archive/2014/02/24/a-new-look-for-net-reference-source.aspx。
发现有在线浏览功能,和离线打包下载,下载回来的代码是有解决方案和项目文件的,也就是在VS里面直接能导航等。
在线浏览归功于 http://msdn.microsoft.com/en-US/roslyn ,微软的Roslyn项目,VS系列编译器的未来。
在线示例:http://referencesource-beta.microsoft.com/#mscorlib/system/environment.cs
我下了离线源代码:
http://referencesource-beta.microsoft.com/download.html
然后发现了许多我曾经有兴趣并想研究的代码(包含了部分C++代码):
DotNetReferenceSource.zip\Source\wpf\src\Shared\detours ,此目录包含了微软http://research.microsoft.com/en-us/projects/detours/项目的完整版本,版本号是Version 3.0 Build_306.注意MS上有社区版本,只支持X86,不支持AMD64,而这个是全的,支持X86 AMD64 IA64 ARM,以前在MS网站上卖的很贵的哦(刚才没找到卖的连接)。
DotNetReferenceSource.zip\Source\wpf\src\printing\cpp 此目录包含了WPF系统打印部分代码。
DotNetReferenceSource.zip\Source\wpf\src\host 此目录包含WPF的Hosting 系列代码,就是在浏览器里面加载xaml进行渲染的部分。这是我曾经关注的。
DotNetReferenceSource.zip\Source\wpf\src\Graphics\include 这个没代码,仅有相当于头文件的c#文件,但研究过WPF底层的朋友们会发现此处有很多结构体,正式WPF托管部分和Native引擎交互通信用的数据交换结构。
DotNetReferenceSource.zip\Source\wpf\src\Core\cpp\dwritewrapper C++代码,没细看
DotNetReferenceSource.zip\Source\wpf\src\Core\cpp\truetypesubsetter 这个就比较有料了,WPF字体模糊是什么原因估计这部分代码能让你明白,他是用来栅格化truetype字体的,wpf的字体不是gdi渲染出来的,有自己的渲染引擎,估计就是这个了。
DotNetReferenceSource.zip\Source\vb 这个目录是相对最完整的,包含了C++代码的VB源代码的编译器,你没看错,是编译器!而且不仅是编译器,还有很多好东西。
ok,Enjoy Yourself!