在.net可执行文件中嵌入OpenXML SDK文件

本文关键字:OpenXML SDK 文件 net 可执行文件 | 更新日期: 2023-09-27 18:05:03

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,它实现了LZMA压缩和解压缩,大约45 KiB的编译MSIL(由。net Framework 4.0编译)。

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

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

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

在.net可执行文件中嵌入OpenXML SDK文件

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

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

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

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