.net 可以从内存中动态加载 c++/cli dll 吗?

Can .net dynamic load c++/cli dll from memory?

我有一个依赖本机 dll 的 c++/cli dll。通过使用内存模块将本机 dll 嵌入到 cli dll 中,我能够将它们打包到一个混合 dll 中。 我想知道是否可以将这个混合 dll 嵌入到 .net exe 中并从内存中加载(无需将文件提取到磁盘)。 我试过 Ilmerge 和 System.Reflection.Assembly.Load(byte[]...) 但它不起作用。

所以我现在做的是先提取 dll 并调用函数,然后在我不想要的程序完成后将其删除。

混合模式 dll 依赖于本机 dll,并且由于 Windows 图像加载器的限制而无法从内存中加载。我已经看过一些从内存中加载 dll 的 C++ 代码,但我怀疑你是否想这样做。它基本上重新实现了加载器。

但如果您想将 exe 作为单个文件分发,我建议您使用 LibZ。使用此工具,您可以将混合模式 dll 作为资源嵌入到 C# 程序集中。加载 C# 模块时,它会将混合模式程序集转储到临时文件夹并透明地加载它。您甚至可以嵌入两个版本的混合模式 dll,每个平台一个:x86 或 x64。