Ser*_*nov 25 .net .net-assembly
我有一个使用System.Runtime.Serialization
程序集的项目.我正在使用该DataContractSerializer
程序集中的类型,但我遇到了问题.有两个组件:
C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Runtime.Serialization.dll
C:\ WINDOWS\Microsoft.net \框架\ v4.0.30319\System.Runtime.Serialization.dll
它们都有相同的版本 - v4.0.30319.第一个有429kb大小,第二个有1037kb.我用反射器来查看类列表,第一个没有我需要的类(DataContractSerializerSettings
).但是,第二个确实拥有它.
为什么该组件的大小和类有一些很大的不同?如果我使用第二个而不是第一个,那会没关系吗?
Han*_*ant 52
.NET 4.0版在框架引用程序集的完成方式上做了很大的改变.以前,引用程序集是运行时程序集的简单副本,存储在GAC中.然而,这引起了一些痛苦的问题.值得注意的是WaitHandle.WaitOne(int)
重载,它是在.NET 2.0 Service Pack 2更新(又名.NET 3.5)中添加的.程序员使用它而没有注意到它是一个添加的方法,mscorlib程序集版本号仍然是2.0.0.0.但后来发现他们的程序在未修补的.NET 2.0版本上运行时失败了.非常讨厌的kaboom,MissingMethodException没有提示为什么这样的常见方法可能会丢失.
为了防止这种破坏,.NET 4.0引用程序集在您发现的"%programfiles%\ Reference Assemblies"目录中保持独立.它们是特殊的程序集,它们只包含所有IL剥离的元数据.这就是为什么装配体要小得多的原因.
Microsoft现在可以改进.NET 4代码并添加公共类和方法,而不会导致这种破坏.自从最初的4.0版本发布以来,已经发布了4.01,4.02和4.03更新.
DataContractSerializerSetting
因此很容易解释您遇到类的问题,它只是没有出现在参考组件中.它被添加,可能是其中一个增量更新.你不应该尝试,你的程序将在没有更新的机器上中断.您应该等到.NET 4.5,将其添加到引用程序集的版本.如果你真的想要,你可以调用DLL Hell.
归档时间: |
|
查看次数: |
14026 次 |
最近记录: |