3

Microsoft OpenXML SDK 版本 2.0 附带一个 ~5111 KiB .NET 程序集 (DLL) 和一个 ~14436 KiB 未压缩的 XML 文件。这两者都是成功使用 SDK 所必需的。重要更新:只需要 DLL 文件;XML 只是程序员的 API 文档!!)

我已经使用有效的 SDK 编写了一个程序,我对此感到满意。但是,我使用 LZMA2 压缩了 OpenXML SDK 数据(DLL 和 XML),结果只有 1287 KiB。节省了 18260 KiB,通过普通 WAN 链接传输可能需要至少几秒钟,最多几分钟。

我从7-zip.org下载了 LZMA SDK,它在大约 45 KiB 的已编译 MSIL(由 .NET Framework 4.0 编译)中实现了 LZMA 压缩和解压缩。

我的目标是压缩资源(使用 7-Zip 之类的东西),将它们存储在构建的程序集 (.exe) 中,然后解压缩并加载它们。我知道如何使用 7-Zip SDK 进行解压缩。因此,我有两个问题:

  1. 如何将 OpenXML SDK 程序集 (.dll) 加载到正在运行的 .NET 进程中而不将其写入磁盘?假设我有一个 byte[] 的 DLL 未压缩字节;我将自己负责将资源打包到可执行文件中。

  2. 如何告诉程序集从内存中加载 OpenXML 架构 (DocumentFormat.OpenXml.xml) 而不将其写入磁盘?假设我有一个包含未压缩 XML 的 byte[] 或字符串。同样,我将自己负责解压缩和资源打包。

4

2 回答 2

3

Assembly.Load解压后使用适当的重载到byte[]. DocumentFormat.OpenXML.xml执行应用程序不需要该文件。它只是面向开发人员的 API 文档。Visual Studio 使用它在 Intellisense 中显示信息。

您应该使 dll(或压缩的 dll)成为嵌入式资源,并在AppDomain.AssemblyResolve请求时使用事件来加载 SDK。这里有一些示例代码。

于 2013-03-21T17:03:40.287 回答
1

假设您不能在安装过​​程中简单地解压缩可执行文件旁边的 dll(这是迄今为止最简单的选择),我建议您查看Assemby.Load(byte[]).

至于DocumentFormat.OpenXml.xml,我不是很熟悉,但到目前为止我发现它只是开发所需要的,而不是部署所需要的。

于 2013-03-21T17:01:31.640 回答