c++ - 如何在COR Profiler中从AssemblyID获取Assembly Info?

标签 c++ .net clr-profiling-api

我想捕获所有已加载程序集的信息以及公钥、版本等元数据。为此,我使用 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/

相关文章:

c++ - 初始化输出后获取控制台大小

c++ - 在 Windows 运行时组件中使用 WRL 获取文件夹路径返回空字符串

c++ - std::tuple 比 std::array 快吗?

c# - 什么控制 .NET 中的 CurrencyPositivePattern

c# - 了解结构的 "this"参数(特别是迭代器/异步)

c# - ICorProfilerCallback2 : CLR profiler does not log all Leave calls

c++ - 用于 OpenGL 的 Shapes 绘图简单库,有吗?

.net - 线程vs线程池-.Net 2.0

c# - 具有类型参数的继承泛型类的协变是子类

c++ - 在 ClrProfiler 中,如何从 ObjectID 获取托管对象