ICorProfilerCallback6::GetAssemblyReferences Method

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

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

Syntax

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

Parameters

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

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

Return Value

忽略此回调的返回值。

Remarks

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

GetAssemblyReferences仅当探查器必须修改程序集的元数据以添加程序集引用时,才使用回调。 (但请注意,程序集元数据的实际修改是在 ICorProfilerCallback::ModuleLoadFinished回调方法中完成的。探查器应实现 GetAssemblyReferences 回调方法,以通知公共语言运行时(CLR)在加载模块时将添加程序集引用。 这有助于确保 CLR 在此早期阶段做出的程序集共享决策仍然有效,尽管探查器计划稍后修改元数据程序集引用。 这可以避免某些事件探查器元数据修改导致 SECURITY_E_INCOMPATIBLE_SHARE 错误。

探查器使用此方法提供的 ICorProfilerAssemblyReferenceProvider 对象向 CLR 程序集引用关闭演练程序添加程序集引用。 ICorProfilerAssemblyReferenceProvider 对象只能从此回调中使用。 从此回调调用 ICorProfilerAssemblyReferenceProvider::AddAssemblyReference 方法不会导致修改后的元数据,但仅在修改后的程序集引用关闭演练中。 探查器仍必须使用 IMetaDataAssemblyEmit 对象从引用程序集的 ICorProfilerCallback::ModuleLoadFinished 回调中显式添加程序集引用,即使它实现 GetAssemblyReferences 回调也是如此。

探查器应准备好接收对同一程序集的此回调的重复调用,并且应对每个此类重复调用进行相同的响应(通过发出同一组 ICorProfilerAssemblyReferenceProvider::AddAssemblyReference 调用)。

Requirements

平台:请参阅系统要求

页眉: CorProf.idl、CorProf.h

Library: CorGuids.lib

.NET Framework 版本: 自 4.5.2 起可用

See also