Junfeng Zhang

Random notes
随笔 - 47, 评论 - 299, 引用 - 74

导航

标签

每月存档

最新留言

广告

What is new in Fusion in .Net framework 2.0 (2) ---- Assemblies now have ProcessorArchitecture

先看看gacutil -l的结果:

Microsoft (R) .NET Global Assembly Cache Utility.  Version 2.0.40607.16
Copyright 咖啡 Microsoft Corporation. All rights reserved.

The Global Assembly Cache contains the following assemblies:
  CustomMarshalers, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
  ISymWrapper, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
  Microsoft.VisualC, Version=8.0.1200.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
  mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, ProcessorArchitecture=x86
  System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
  System.Data.OracleClient, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
  System.EnterpriseServices, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
  System.Transactions, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
  Accessibility, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  apphost, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  AspNetMMCExt, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  cscompmgd, Version=8.0.1200.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  IEExecRemote, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  IEHost, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  IIEHost, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  Microsoft.Build.Engine, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  Microsoft.Build.Framework, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  Microsoft.Build.Tasks, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL

< The rest is omitted>

Accessibility, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

  ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

  ConMan, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

  ConManDataStore, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

  ConManServer, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

 

< The rest is omitted>

 

你可以看到,GAC里的Assemblies的名字,除了name, version, culture, publicKeyToken, 又加了一个processorArchitecture. gacutil的结果里,有的显示processorArchitecture=x86 有的显示processorArchitecture=MSIL,有的没有processorArchitecture

 

加入processorArchitecture是为了支持64位。绝大多数Assemblies都是processorArchitecture neutral的。同一个程序既可以在32位上运行,也能在64位上运行。这些assemblies包括所有的C#,VB.NET,和一部分Managed C++ assemblies。它们的processorArchitectureMSIL(之所以叫MSIL而不是neutral,是因为neutral有别的意思)。而绝大多数的Managed C++ assemblies,因为它们同时包括Managed unmanaged的代码,它们必须编译两遍。一次32位的,一次64位的。在64位的OS里,如果32位的assembly64位的assembly要共存的话,必须要有什么区分它们,这就是processorArchitecture。(C\VB.Net assemblies 如果用了P/Invoke的话也有可能需要编译成processorArchitecture specific assembly)。

 

beta1processorArchitecture只在Fusion里存在。在System.Reflection.AssemblyName里暂时还不存在。在beta2里应该能看到System.Reflection.AssemblyName 加入processorArchitecture

 

1.11.0编译的assemblies,没有processorArchitecture。在64位的OS里它们只能以32位的方式运行。

 

微软的编译器都提供了选项编译成64位或者是32位的assembly 比如C#,

 

H:\WINDOWS\Microsoft.NET\Framework\v2.0.40607>csc /?

Microsoft (R) Visual C# .NET Compiler version 8.00.40607.16

for Microsoft (R) Windows (R) .NET Framework version 2.0.40607

Copyright 咖啡 Microsoft Corporation 2001-2003. All rights reserved.

 

                      Visual C# .NET Compiler Options

 

                        - OUTPUT FILES -

/out:<file>                   Output file name (default: base name of file with

                              main class or first file)

/target:exe                   Build a console executable (default) (Short form:

                              /t:exe)

/target:winexe                Build a Windows executable (Short form: /t:winexe)

/target:library               Build a library (Short form: /t:library)

/target:module                Build a module that can be added to another

                              assembly (Short form: /t:module)

/delaysign[+|-]               Delay-sign the assembly using only the public

                              portion of the strong name key

/doc:<file>                   XML Documentation file to generate

/keyfile:<file>               Specifies a strong name key file

/keycontainer:<string>        Specifies a strong name key container

/platform:<string>            Limit which platforms this code can run on: x86,

                              Itanium, x64, or anycpu. The default is anycpu.

 

<The rest is omitted>

 

posted on 2004-06-30 15:55:00 by junfeng  评论(3) 阅读(4398)

What is new in Fusion in .Net framework 2.0 (1) ---- Fusion.dll is....gone?

所有的讨论都假设你已经看过了.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)的证明。

 

 

posted on 2004-06-30 15:18:00 by junfeng  评论(1) 阅读(5096)

touch foo.exe

很久没有更新我的blog了。有很多原因。一个是我上个月搬家,从加州搬回西雅图。然后在没有网络的黑暗里度过了一个月。不久前才可以重新上网。另外一个,是因为我有一个习惯,不愿意讨论没有公布的东西。因此.Net framework 2.0的东西我都不说,然而以前的东西大部分都在我的英文blog里覆盖了。今天2.0 beta1发布了,我也可以讲讲Fusion方面有些什么改变。

 先不管这些。说说今天的事情。今天晚上微软组织了一些华人工程师在网上和国内的朋友对话。时间是北京时间早上9:30 - 10:30(西雅图时间傍晚6:30-7:30)。对话主要是以问答的方式。国内的朋友问问题,然后微软的朋友做回答。对话的效果不一定是最理想的。人太多,问的问题太泛,很多问题不适合在非NDA的情况下问。但这是一个开始,一个好的开始。希望以后能有更专门化的对话,讨论能够更深入,更直接。

 对话记录会在微软的主页上发布。有兴趣的朋友可以去读读。

posted on 2004-06-30 13:55:00 by junfeng  评论(2) 阅读(1479)

Powered by: Joycode.MVC引擎 0.5.2.0