我希望我的应用程序(用ocaml编写)读取托管DLL并检索其中包含的类定义。我在哪里可以找到关于如何操作的公共文档/示例代码?
[编辑: 由于我在ocaml中编写这个应用程序,我正在寻找实际的文件格式定义,因为我不能使用.NET自己的汇编检查功能]
谢谢!
答案 0 :(得分:2)
没有正式的文件规范可用,主要是因为它可能会发生变化并且已经多次更改(.NET 1.1,2.0和4.0)。 Ecma 335中提供了程序集清单中元数据表的结构描述。 Windows SDK的CorHdr.h文件包含基本声明,但只能直接从C或C ++使用。
没有人试图直接读取文件。相反,您使用元数据api,IMetaDataImport2。很好的例子可以广泛使用,名字很好。 SSCLI20项目包含ildasm的源代码和显示正在使用的接口的C#编译器。 CCI Metadata project也非常有用,旨在帮助您实现编译器,简而言之可能不直接在OCaml中使用。
请注意,IMetaDataImport是一个COM接口,因此您尝试将此端口移植到OCaml的痛苦程度将取决于您的实现对COM的支持程度。
答案 1 :(得分:1)
本准则应该可以帮助您开始
Assembly dLL = Assembly.LoadFile(assemblyPath);
foreach (Type type in dLL.GetTypes())
{
//...play with type here
}
答案 2 :(得分:1)
好的,我发现了一些有关读取PE文件和CLI元数据的相关信息。具体来说,本文http://wyday.com/blog/2010/how-to-detect-net-assemblies-x86-x64-anycpu/在C#中有一个示例源代码,并链接到PE/COFF specification和CLI Metadata specification。看起来他们已经足够开始了。
但是,如果有人愿意分享更具体的信息/示例源代码,我仍然会打开这个问题。再次感谢所有回答的人!