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 中实现了 LZMA 压缩和解压缩(由 .NET Framework 4.0 编译)。
我的目标是压缩资源(使用 7-Zip 之类的东西),将它们存储在构建的程序集 (.exe) 中,然后解压缩并加载它们。我知道如何使用 7-Zip SDK 进行解压。因此我有两个问题:
如何在不将其写入磁盘的情况下将 OpenXML SDK 程序集 (.dll) 加载到正在运行的 .NET 进程中?假设我有 DLL 的未压缩字节的 byte[];我会自己负责将资源打包到可执行文件中。
如何让程序集从内存中加载 OpenXML 架构 (DocumentFormat.OpenXml.xml) 而无需将其写入磁盘?假设我有一个包含未压缩 XML 的 byte[] 或字符串。再次说明,我会自己负责解压和资源打包。
最佳答案
解压到byte[]
后,使用适当的Assembly.Load
重载。 DocumentFormat.OpenXML.xml
文件不是应用程序执行所必需的。它只是开发人员的 API 文档。 Visual Studio 使用它在 Intellisense 中显示信息。
您应该使 dll(或压缩的 dll)成为嵌入式资源,并使用 AppDomain.AssemblyResolve
事件在请求时加载 SDK。 here 有一些示例代码.
关于c# - 在 .NET 可执行文件中嵌入 OpenXML SDK 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15553315/