IHostAssemblyStore :: ProvideAssembly - 文件夹中程序集的实现

时间:2012-05-31 17:06:22

标签: c++ .net clr4.0 clr-hosting

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

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

我不熟悉这个WinApi / OLE /无论编程,我都不知道怎么做 从c ++中的磁盘上的文件中获取一个IStream *。

或者是否有另一种方法从任意文件夹加载默认域的AppDomainManager?

1 个答案:

答案 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匹配。