2

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

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

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

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

4

1 回答 1

1

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

于 2012-07-01T21:43:02.340 回答