1

我想捕获所有已加载程序集的信息以及公钥、版本等元数据。为此,我使用 ICorProfiling API 和回调开发了 .Net 自定义分析器。我可以通过订阅 AssemblyLoadFinished 事件来捕获加载的程序集 ID。但是从这个 AssemblyID 中,我如何获取程序集元数据,如公钥、版本等。

我找到了一个方法'IMetaDataAssemblyImport::GetAssemblyProps'。但它接受程序集令牌(即 mdAssembly)。如何将 AssemblyID 转换为 mdAssembly?

4

1 回答 1

2

元数据令牌(包括程序集元数据令牌)是特定于模块的,一个清单模块只能定义一个程序集,因此实际上只有一个程序集元数据令牌;但您可能应该使用IMetaDataAssemblyImport::GetAssemblyFromScope而不是硬编码。

真正的问题是如何为 AssemblyID 获取正确的 IMetaDataAssemblyImport 实例。您可以使用ICorProfilerInfo::GetAssemblyInfo获取清单模块的模块 ID,然后使用ICorProfilerInfo::GetModuleMetaData获取 IMetaDataAssemblyImport 实例。

于 2018-02-27T08:09:13.557 回答