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 []或字符串。再说一次,我将自己处理减压和资源包装。
答案 0 :(得分:3)
解压缩到Assembly.Load
后使用byte[]
的适当重载。应用程序不需要DocumentFormat.OpenXML.xml
文件。它只是开发人员的API文档。它被Visual Studio用于在Intellisense中显示信息。
您应该将dll(或压缩的dll)设置为嵌入式资源,并使用AppDomain.AssemblyResolve
事件在请求时加载SDK。有一些示例代码here。
答案 1 :(得分:1)
假设您无法在安装过程中简单地解压缩可执行文件旁边的dll(这是迄今为止最简单的选项),我建议您查看Assemby.Load(byte[])
。
至于DocumentFormat.OpenXml.xml,我对它并不熟悉,但到目前为止我发现它只是开发所需而不是部署。