我有一个c ++ / cli dll,它依赖于本机dll。通过使用内存模块将本机dll嵌入到cli dll中,可以将它们打包成一个混合的dll。 我想知道是否可以将这个混合的dll嵌入到.net exe并从内存加载(不将文件解压缩到磁盘)。 我已经尝试过Ilmerge和System.Reflection.Assembly.Load(byte [] ...)并且它不起作用。
所以我现在所做的是在之前提取dll并调用函数,然后在程序结束后删除它,我不想要。
答案 0 :(得分:1)
混合模式dll依赖于本机dll,并且由于Windows映像加载器的限制而无法从内存加载。我已经看过一些从内存中加载dll的C ++代码,但我怀疑你是不是想这样做。它基本上重新实现了加载器。
但是如果您想将exe作为单个文件分发,我建议您使用LibZ。使用此工具,您可以将混合模式dll作为资源嵌入到C#程序集中。加载C#模块后,它会将混合模式程序集转储到临时文件夹并以透明方式加载它。您甚至可以嵌入两个版本的混合模式dll,每个平台一个:x86或x64。