读取嵌入式程序集时遇到的麻烦(.dll)

时间:2012-07-01 21:32:19

标签: c# dll resources .net-assembly

所以,我正在为我的项目制作一个自定义安装程序,我需要的是将所有内容“打包”在一个文件中。 (我不能使用ILMerge或.NETZ,因为我必须包含的一个东西是一个非托管(它是如何调用的?)程序集。) 无论如何,我主要从这里读了很多东西,人们说要这样做:

  • 将.dll添加为嵌入式资源;
  • 向AssemblyResolve方法添加处理程序,以便在我的应用程序找不到程序集时触发
  • 在该处理程序中,使用将输入流传输到Assembly.Load()可以使用的字节数组的函数,使其从内存加载.dll。

我做了所有这些事情并且添加了对.dll的正常引用,因此我的代码可以正确编译。但是,当我从应用程序所在的目录中删除.dll文件并尝试运行它时,“无法加载文件或程序集...”对话框(或者不管它是什么,你知道我在说什么)弹出并告诉我它无法加载我的.dll,虽然我明确告诉它从AssemblyResolve EventHandler中的那个字节数组加载它。
如果这是之前已经回答的问题,我很抱歉。看看推荐的类似问题,我无法看到答案 我唯一能看到的可能是“C#不允许我从字节加载,除非我处于高安全性环境中。”如果有人知道什么,请你确认/否认这个陈述,并告诉我什么是“高安全性背景”?我承认,我很复杂。 :)

提前感谢您的时间和答案!

1 个答案:

答案 0 :(得分:1)

汇编是托管dll的另一个名称 - 本机dll不会在AssemblyResolve位afaik结束。我不知道是否有任何其他选项,但在启动时将嵌入式DLL保存到磁盘,但我还没有找到告诉操作系统(负责加载非托管dll)的选项如何找到嵌入式DLL。