所有的讨论都假设你已经看过了.Net framework 2.0 beta1

如果你到.Net framework 2.0 beta1 的目录上看看fusion.dll,你会发现fusion.dll不可思议的小。

H:\WINDOWS\Microsoft.NET\Framework\v2.0.40607>dir fusion.dll
 Volume in drive H has no label.
 Volume Serial Number is E0AF-5950

 Directory of H:\WINDOWS\Microsoft.NET\Framework\v2.0.40607

06/24/2004  10:34 PM             6,656 fusion.dll
               1 File弯月          6,656 bytes
               0 Dir弯月  10,966,089,728 bytes free

H:\WINDOWS\Microsoft.NET\Framework\v2.0.40607>cd..

H:\WINDOWS\Microsoft.NET\Framework>cd v1.1.4322

H:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>dir fusion.dll
 Volume in drive H has no label.
 Volume Serial Number is E0AF-5950

 Directory of H:\WINDOWS\Microsoft.NET\Framework\v1.1.4322

02/24/2003  04:42 PM           282,624 fusion.dll
               1 File弯月        282,624 bytes
               0 Dir弯月  10,966,081,536 bytes free

fusion.dll2.0里只有6K大,比1.1的时候小了40倍。就是说fusion.dll几乎不存在了。

 

事实上是,fusion.dllmscorwks.dll合并了。以前fusion.dll里的代码,和新加的代码,都在mscorwks.dll里。现在的fusion.dll的存在,只是为了backward compatibility。它做的所有的事情,只是forwardmscorwks.dll

 

如果你仔细的话,你会发现mscorsvr.dll不见了。Mscorsvr.dll也和mscorwks.dll合并了。从此以后你再也不能通过判断mscorsvr.dll来决定你是用Server GC还是WorkStation GC。这是为什么System.Environment 新加了IsServerGC 的原因 http://lab.msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/P_System_Environment_IsServerGC.asp

 

另外,mscorsn.dll其实也和mscorwks.dll合并了。

 

所以现在mscorwks.dll = mscorwks.dll + fusion.dll + mscorsn.dll + mscorsvr.dll

 

看看mscorwks.dll大小的变化就知道了。

 

H:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>dir mscorwks.dll

 Volume in drive H has no label.

 Volume Serial Number is E0AF-5950

 

 Directory of H:\WINDOWS\Microsoft.NET\Framework\v1.1.4322

 

02/24/2003  04:42 PM         2,482,176 mscorwks.dll

               1 File弯月      2,482,176 bytes

               0 Dir弯月  10,965,708,800 bytes free

 

H:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>dir ..\v2.0.40607\mscorwks.dll

 Volume in drive H has no label.

 Volume Serial Number is E0AF-5950

 

 Directory of H:\WINDOWS\Microsoft.NET\Framework\v2.0.40607

 

06/25/2004  01:13 PM         5,176,320 mscorwks.dll

               1 File弯月      5,176,320 bytes

               0 Dir弯月  10,965,708,800 bytes free

 

合并的原因,是因为performanceWindows认为CLR里文件太多。最常用的代码应该都放到一起。这是为什么你看到现在的巨大的mscorwks.dll的原因。这也是我另一篇文章(http://blogs.msdn.com/junfeng/archive/2004/02/23/78139.aspx)的证明。