系统程序集上的.NET反射在System.Data.dll上失败

时间:2014-04-21 08:30:22

标签: c# .net system.reflection

我有一个语言编译器,我刚刚更新到目标.NET 4.0,框架程序集的元数据生成器现在在System.Data.dll上失败,而其他所有其他工作正常(mscorlib,System等)

元数据生成器只是加载程序集,反映所有类型和memberinfo,并为该语言生成存根类。

我使用Assembly.Load()和/或Assembly.ReflectionOnlyLoad()

  

无法加载文件或程序集' file:/// c:\ windows \ Microsoft.NET \ framework \ v4.0.30319 \ System.Data.dll'   或其中一个依赖项。尝试加载程序   格式不正确。

它是为#34; AnyCPU"而构建的。我安装了.NET 4.5更新,运行Windows 7 / x64。

1 个答案:

答案 0 :(得分:2)

如果使用corflags工具分析程序集,您应该看到ILONLY: 0表示System.Data.dll,而其他人(mscorlib,System)ILONLY: 1。有关ILONLY的更多信息,请访问here

因此,程序集的构建方式不同,您不应期望反射适用于所有人。 System.Data.dll似乎是一个混合模式程序集,它始终与位数有关。

如果您无法将应用程序作为32位运行以加载32位程序集,则可以将Mono.Cecil视为@xmojmr表示为it supports reading mixed-mode assemblies