IHostAssemblyStore::P rovideAssembly - 文件夹程序集的实现

IHostAssemblyStore::ProvideAssembly - Implementation for assemblies from folders

本文关键字:程序集 实现 文件夹 rovideAssembly IHostAssemblyStore      更新时间:2023-10-16

我正在尝试弄清楚如何在托管 clr 宿主方案中从与本机.exe文件不同的文件夹中加载 AppDomainManager 程序集。

有没有人做过IHostAssemblyStore::P rovideAssembly实现,将从文件夹中加载 AppDomainManager 程序集,并希望共享它?

我是这个WinApi/OLE/任何编程的新手,我不知道如何在 C++ 中从磁盘上的文件中获取 IStream*。

或者是否有另一种方法从任意文件夹加载默认域的应用程序域管理器?

SHCreateStreamOnFile 会将程序集从光盘加载到 IStream 中,例如:

HRESULT hr = SHCreateStreamOnFile(assemblyPath, STGM_READWRITE, ppStmAssemblyImage);

陷阱:

CLR 将为一个程序集多次调用 ProvideAssembly 实现。

考虑到处理器体系结构,请确保在AssemblyBindInfo中使用postPolicyIdentity在正确的调用中返回"正确的"位:

如果您的程序集是构建"Any CPU"但是当postPolicyIdentity包含例如 "processorarchitecture=amd64"结束时,runtimeHost->Start()调用将失败。

相反,您必须返回COR_E_FILENOTFOUND (0x80070002)直到处理器体系结构匹配。