IHostAssemblyStore::ProvideAssembly 方法

更新:2010 年 6 月

获取对不是由 ICLRAssemblyReferenceList(自 IHostAssemblyManager::GetNonHostStoreAssemblies 中返回)引用的程序集的引用。 公共语言运行时 (CLR) 为没有出现在列表中的每个程序集调用 ProvideAssembly

HRESULT ProvideAssembly (
    [in]  AssemblyBindInfo *pBindInfo,
    [out] UINT64           *pAssemblyId,
    [out] UINT64           *pHostContext,
    [out] IStream          **ppStmAssemblyImage,
    [out] IStream          **ppStmPDB
);

参数

  • pBindInfo
    [in] 一个指向 AssemblyBindInfo 实例的指针,宿主使用该实例确定某些绑定特征,包括是否存在任何版本控制策略以及要绑定到哪个程序集。

  • pAssemblyId
    [out] 一个指针,它指向为此 IStream 请求的程序集的唯一标识符。

  • pHostContext
    [out] 一个指向特定于宿主的数据的指针,使用这些数据可确定请求的程序集的证据而无需平台 invoke 调用。 pHostContext 对应于托管 Assembly 类的 HostContext 属性。

  • ppStmAssemblyImage
    [out] 一个指针,它指向包含要加载的可迁移可执行 (PE) 映像的 IStream 的地址;如果未能找到该程序集,则为 Null。

  • ppStmPDB
    [out] 一个指针,它指向包含程序调试 (PDB) 信息的 IStream 的地址;如果未能找到该 .pdb 文件,则为 Null。

返回值

HRESULT

说明

S_OK

ProvideAssembly 已成功返回。

HOST_E_CLRNOTAVAILABLE

CLR 尚未加载到进程中或者处于无法运行托管代码或成功处理调用的状态。

HOST_E_TIMEOUT

调用超时。

HOST_E_NOT_OWNER

调用方不拥有锁。

HOST_E_ABANDONED

事件在被阻止的线程或纤程正在等待它时被取消。

E_FAIL

发生了未知的灾难性故障。 如果某方法返回 E_FAIL,CLR 便无法再在进程中使用。 对宿主方法的后续调用都将返回 HOST_E_CLRNOTAVAILABLE。

COR_E_FILENOTFOUND (0x80070002)

未能确定请求程序集的位置。

ERROR_INSUFFICIENT_BUFFER

pAssemblyId 指定的缓冲区大小不足以保存宿主希望返回的标识符。

备注

为 pAssemblyId 返回的标识值是由宿主指定的。 标识符在进程的生存期内必须是唯一的。 CLR 使用此值作为流的唯一标识符。 它对照 ProvideAssembly 的其他调用返回的 pAssemblyId 值,对每个值进行检查。 如果宿主为另一个 IStream 返回了相同的 pAssemblyId 值,则 CLR 将检查是否已映射了该流的内容。 如果已映射,则运行时将加载现有的映像副本,而不是进行新的映射。

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**MSCorEE.h

**库:**作为一项资源包含在 MSCorEE.dll 中

**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

请参见

参考

ICLRAssemblyReferenceList 接口

IHostAssemblyManager 接口

IHostAssemblyStore 接口

修订记录

Date

修订记录

原因

2010 年 6 月

更正了无法加载程序集时返回的 HRESULT。

客户反馈