我正在尝试弄清楚如何从不同于本机.exe文件的文件夹中加载托管clr托管方案中的AppDomainManager程序集。
有没有人做过IHostAssemblyStore :: ProvideAssembly实现, 这将从文件夹加载AppDomainManager程序集,并希望共享它?
我不熟悉这个WinApi / OLE /无论编程,我都不知道怎么做 从c ++中的磁盘上的文件中获取一个IStream *。
或者是否有另一种方法从任意文件夹加载默认域的AppDomainManager?
答案 0 :(得分:0)
SHCreateStreamOnFile会将光盘中的程序集加载到IStream中,例如:
HRESULT hr = SHCreateStreamOnFile(assemblyPath, STGM_READWRITE, ppStmAssemblyImage);
<强>陷阱:强>
CLR将针对一个程序集多次调用您的ProvideAssembly实现。
考虑到处理器架构,请务必使用AssemblyBindInfo中的postPolicyIdentity返回正确调用的“右”位:
如果您的程序集是构建"Any CPU"
,但是当postPolicyIdentity包含例如"processorarchitecture=amd64"
调用结束时runtimeHost->Start()
将失败。
相反,您必须返回COR_E_FILENOTFOUND (0x80070002)
,直到processorarchitecture匹配。