0

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

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

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

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

4

1 回答 1

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)直到处理器架构匹配。

于 2012-06-05T16:15:27.473 回答