.NET Framework的封装能力的确很强,但是这样做有时也给我们带来一些麻烦,比如我们想了解.NET Framework内部的一些运行机制。这种情况下,我们就需要查看其源代码,但是.NET毕竟不是开源的,那么怎么办呢?微软似乎了解到.NET程序员的这点苦衷,所以“开放”了.NET的源代码,但是必须遵需Microsoft Reference License (MS-RL)。原文参考:ScottGu's 的Releasing the Source Code for the .NET Framework Libraries 。
参考步骤:
随便新建一个项目,并设置一个断点,然后F5,进入调试模式。
菜单中选择”工具“—”选项“,对话框中勾选“显示所有设置”,选择”调试“—"符号",选择临时存放符号文件的目录,单击“从Microsoft符号服务器加载符号”。
在弹出的对话框中单击“确定”。
接下来Visusl Studio会从Microsoft符号服务器下载符号文件,这个过程比较慢,需要下载40MB左右的文件。
下载完成后,单击“确定”,关闭选项对话框。接下来按F11单步调试,Visusl Studio就会自动下载源代码了。第一次还会出现“最终用户许可协议”对话框,单击”同意“。
经过这样的分析,发现Console.WriteLine("Hello Source Code")最终是调用WriteFile(hFile, p + offset, count, out numBytesWritten, Win32Native.NULL)这个Win32API函数实现的。
到符号缓存文件夹看看,源码在src文件夹中,目录很深,.NET真是个大项目。"F:\Program Files\Microsoft.NET\SymbolCache\src\source\dotnetfx35sp1_3053\1.3\DEVDIV\depot\DevDiv\releases\whidbey\netfxsp\ndp\clr\src\BCL\System\IO\__ConsoleStream.cs\1\__ConsoleStream.cs"
微软只是提供了一部分源码,貌似不是全部,不过对我们.NET程序员来说,已经相当有用了,这是个不错的开端,希望微软继续。想了解CLR机制的朋友可以试试,应该比反射好,因为源码中带有注释。