我想捕获所有已加载程序集的信息以及公钥、版本等元数据。为此,我使用 ICorProfiling API 和回调开发了 .Net 自定义探查器。我可以通过订阅 AssemblyLoadFinished 事件来捕获已加载的程序集 ID。但是从这个 AssemblyID 中,我如何获取程序集元数据,如公钥、版本等。
我找到了一个方法“IMetaDataAssemblyImport::GetAssemblyProps”。但它接受程序集标记(即 mdAssembly)。如何将 AssemblyID 转换为 mdAssembly?
最佳答案
元数据 token (包括程序集元数据 token )是特定于模块的,并且显示的模块只能定义一个程序集,因此实际上只有一个程序集元数据 token ;但你可能应该使用 IMetaDataAssemblyImport::GetAssemblyFromScope而不是对其进行硬编码。
真正的问题是如何获取 AssemblyID 的正确 IMetaDataAssemblyImport 实例。您可以使用 ICorProfilerInfo::GetAssemblyInfo获取 list 模块的模块 ID,然后 ICorProfilerInfo::GetModuleMetaData获取 IMetaDataAssemblyImport 实例。
关于c++ - 如何在COR Profiler中从AssemblyID获取Assembly Info?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48984663/