2014-12-07 16 views
0

说我有给定的构建结构:嵌入并解压引用组件纯粹在存储器

  • MyApp.exe的 - .NET模块
  • 中是指mylib.dll - C++/CLI模块

我怎么收拾中是指mylib.dll到MyApp.exe将作为嵌入资源,并解压MyLib中。 dll在启动时无需将Dll写入文件系统? (从而保持其纯粹在内存中)

  1. 我可以嵌入在VS
  2. 在运行时使用Solution Explorer中的Dll我解压使用GetManifestResourceStream
  3. 那么什么的dll?如何将这个解压后的Dll“整合”到当前上下文中,以便程序的其余部分找到汇编类,而不必将Dll写入磁盘?

编辑:依赖合并工具如ILMerge不能使用,因为DLL是混合模式组件,并且没有典型工具能够合并。

编辑:我可以解开的DLL文件(文件here),并使用Assembly.LoadFile() 但我仍然无法在内存中做到这一点纯粹,写的DLL文件使得它容易受到盗贼谁可以查找DLL并在他们自己的应用程序中使用它。

+1

混合模式程序集应存储在磁盘上,这是包含本机代码的可执行文件的要求。如果你想要一个可交付的可执行文件,那么将它命名为setup.exe,用[this addin]创建(http://blogs.msdn.com/b/visualstudio/archive/2014/04/17/visual-studio-安装项目 - extension.aspx)。 – 2014-12-07 15:46:40

+0

@HansPassant - 谢谢汉斯!我认为你的话是最终的,因为你是这方面的专家。我休息我的情况。 – 2014-12-07 19:17:59

回答

0

有多种嵌入和解包混合模式程序集的方法。

  • Costura - 自动嵌入和所有使用的组件的拆包标有 “复制本地”

  • 手册方法 - 使用标记组件 “嵌入式资源” 和解压thisthis

+0

对于C++/CLI - 但所有上述方法在运行之前实际上都会将程序集的一个副本存储在磁盘上。这是包含本机代码的可执行文件的要求。 – 2014-12-12 13:46:35