2013-03-21 43 views
3

Microsoft OpenXML SDK版本2.0附带〜5111 KiB .NET程序集(DLL)和〜14436 KiB解压缩XML文件。 这两个都是成功使用SDK所必需的。 重要更新:只有DLL文件是必需的,XML仅仅是一种编程!! API文档)在.NET中嵌入OpenXML SDK文件可执行文件

我使用作品的SDK编写的程序,我很满意。但是,我使用LZMA2压缩了OpenXML SDK数据(DLL和XML),结果只有1287 KiB。节省18260千比特币,通过平均广域网链路可以传输至少几秒钟,长达几分钟的时间。

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

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

  1. 如何加载的OpenXML SDK组件(.dll文件)到运行.NET过程中没有将其写入磁盘?假设我有一个字节[]的DLL的未压缩字节;我会照顾自己的资源打包到可执行文件中。

  2. 如何让程序集从内存中加载OpenXML模式(DocumentFormat.OpenXml.xml)而不写入磁盘?假设我有一个byte []或包含未压缩XML的字符串。再次,我会照顾自己的减压和资源包装。

+0

嘿,如果没有记录,代码有什么好处,对吧? :D – 2013-03-22 18:02:03

回答

3

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

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

+0

谢谢,但我最终使用'dynamic'关键字做了后期绑定,采用了我原来的手段,其中包括手动解压缩。感谢有关XML文件的信息。一旦我意识到做了我的代码是多么的尴尬和难以维护,我发现了[.NETZ](http://madebits.com/netz/index.php),它完全符合我的需求,而无需修改我自己的代码。 – allquixotic 2013-03-22 17:51:05

1

假设你不能简单的安装过程中解压缩的dll旁边的可执行文件(这是到目前为止,最简单的选择),我会建议寻找到Assemby.Load(byte[])

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

相关问题