【发布时间】:2014-04-21 08:30:21
【问题描述】:
我有一个语言编译器,我刚刚更新为面向 .NET 4.0,框架程序集的元数据生成器现在在 System.Data.dll 上失败,而所有其他编译器都可以正常工作(mscorlib、System 等)
元数据生成器只是加载程序集,反映所有类型和成员信息,并为该语言生成一个存根类。
我正在使用 Assembly.Load() 和/或 Assembly.ReflectionOnlyLoad()
无法加载文件或程序集 'file:///c:\windows\Microsoft.NET\framework\v4.0.30319\System.Data.dll' 或其依赖项之一。试图加载一个程序 格式不正确。
它是为“AnyCPU”构建的。我正在运行安装了 .NET 4.5 更新的 Windows 7/x64。
【问题讨论】:
-
几个月前我遇到了这个问题,这个链接帮助了我:jepsonsblog.blogspot.co.il/2010/12/…你碰到这个了吗?
-
根据谷歌“试图加载格式不正确的程序”,例如blogs.msdn.com/b/arvindsh/archive/2009/06/21/… 这似乎是 32 位与 64 位的问题。不知道 64 位,但在我的情况下,总是需要将调用 ..Load 的 EXE 标记为 x86,以便它只加载 32 位库。应该可以使用 Mono.Cecil 同时加载 32 位和 64 位
-
是的,这解决了它。我可以将 x86 用于 colastub,因为它被称为子进程并将元数据作为文本返回。我的实际需要是从 .NET 程序集中访问类型元数据,以便我可以将它们公开为 Cola 类。我可以考虑 Mono.Cecil。它是用 .NET 本身编写的,还是本机 C/C++ 编写的?不幸的是,我在 10 多年前作为一种爱好开始了 Cola 编译器,当时我使用 C++ 作为我的主要语言,在 Mono 出现之前,现在我后悔没有用 C# 编写它。我希望能够在不使用存根程序的情况下直接访问 CLR 程序集。
-
+1 给大家,谢谢大家的帮助!
标签: c# .net system.reflection