ICorProfilerCallback6::GetAssemblyReferences 方法

[仅在 .NET Framework 4.5.2 及更高版本中受支持]

当公共语言运行时执行程序集引用闭包审核时,通知探查器程序集正处于非常早期的加载阶段。

语法

HRESULT GetAssemblyReferences(        [in, string] const WCHAR* wszAssemblyPath,  
        [in] ICorProfilerAssemblyReferenceProvider* pAsmRefProvider  
);  

参数

wszAssemblyPath
[in] 元数据将发生修改的程序集的路径和名称。

pAsmRefProvider
[in] 指向指定要添加的程序集引用的 ICorProfilerAssemblyReferenceProvider 接口地址的指针。

返回值

将忽略此回调的返回值。

注解

通过在调用 ICorProfilerCallback5::SetEventMask2 方法时设置 COR_PRF_HIGH_ADD_ASSEMBLY_REFERENCES 事件掩码标志来控制此回调。 如果探查器注册 ICorProfilerCallback6::GetAssemblyReferences 回调方法,则运行时会将要加载的程序集的路径和名称以及指向 ICorProfilerAssemblyReferenceProvider 接口对象的指针一起传递到该方法。 然后,探查器可以针对它打算从 GetAssemblyReferences 回调中指定的程序集中引用的每个目标程序集调用 ICorProfilerAssemblyReferenceProvider::AddAssemblyReference 方法,该方法具有一个 COR_PRF_ASSEMBLY_REFERENCE_INFO 对象。

仅当探查器必须修改程序集的元数据以添加程序集引用时,才使用 GetAssemblyReferences 回调。 (但请注意,程序集元数据的实际修改是在 ICorProfilerCallback::ModuleLoadFinishedcallback 方法中完成的。)探查器应该实现 GetAssemblyReferences 回调方法,从而通知公共语言运行时 (CLR) 将在加载完模块后添加程序集引用。 这有助于确保即使探查器打算以后修改元数据程序集引用,CLR 在此早期阶段作出的程序集共享决策也会保持有效。 这可以避免一些由于探查器元数据修改而导致 SECURITY_E_INCOMPATIBLE_SHARE 错误的实例。

探查器使用由此方法提供的 ICorProfilerAssemblyReferenceProvider 对象来将程序集引用添加到 CLR 程序集引用闭包审核器。 ICorProfilerAssemblyReferenceProvider 对象应仅用于此回调内部。 从此回调调用 ICorProfilerAssemblyReferenceProvider::AddAssemblyReference 方法不会导致元数据发生修改,而仅会导致程序集引用闭包审核发生修改。 探查器仍将必须使用 IMetaDataAssemblyEmit 对象,以从引用的程序集的 ICorProfilerCallback::ModuleLoadFinished 回调内部显式添加程序集引用,即使它实现了 GetAssemblyReferences 回调也是如此。

探查器应该准备接收同一程序集对此回调的重复调用,而且应该完全相同地响应每个这样的重复调用(通过调用同一组 ICorProfilerAssemblyReferenceProvider::AddAssemblyReference)。

要求

平台:请参阅系统要求

头文件: CorProf.idl、CorProf.h

库:CorGuids.lib

.NET Framework 版本:4.5.2 及更高版本

另请参阅