3

Microsoft OpenXML SDKバージョン2.0には、最大5111 KiB .NETアセンブリ(DLL)と最大14436KiBの非圧縮XMLファイルが付属しています。SDKを正常に使用するには、これらの両方が必要です。重要な更新: DLLファイルのみが必要です。XMLはプログラマー向けの単なるAPIドキュメントです!!)

動作するSDKを使用してプログラムを作成しましたが、満足しています。ただし、LZMA2を使用してOpenXML SDKデータ(DLLおよびXML)を圧縮したところ、結果は1287KiBにすぎません。節約額は18260KiBで、平均的なWANリンクを介して転送するには、少なくとも数秒、最大で数分かかる場合があります。

LZMA SDKを7-zip.orgからダウンロードしました。これは、コンパイルされたMSIL(.NET Framework 4.0でコンパイルされたもの)の約45KiBでLZMAの圧縮と解凍を実装します。

私の目標は、リソースを圧縮し(7-Zipなどを使用)、ビルドされたアセンブリ(.exe)に保存してから、解凍してロードすることです。7-ZipSDKを使用して解凍を行う方法を知っています。したがって、私には2つの問題があります。

  1. OpenXML SDKアセンブリ(.dll)をディスクに書き込まずに実行中の.NETプロセスにロードするにはどうすればよいですか?DLLの非圧縮バイトのbyte[]があると仮定します。実行可能ファイルへのリソースのパッキングは自分で行います。

  2. OpenXMLスキーマ(DocumentFormat.OpenXml.xml)をディスクに書き込まずにメモリからロードするようにアセンブリに指示するにはどうすればよいですか?非圧縮XMLを含むbyte[]または文字列があると仮定します。繰り返しになりますが、解凍とリソースのパッキングは自分で行います。

4

2 に答える 2

3

Assembly.Loadに解凍した後、 の適切なオーバーロードを使用しますbyte[]DocumentFormat.OpenXML.xmlアプリケーションの実行にファイルは必要ありません。これは、開発者向けの単なる API ドキュメントです。Intellisense で情報を表示するために Visual Studio で使用されます。

dll (または圧縮された dll) を埋め込みリソースにし、AppDomain.AssemblyResolveイベントを使用して、要求されたときに SDK をロードする必要があります。そのサンプルコードがここにあります。

于 2013-03-21T17:03:40.287 に答える
1

Assemby.Load(byte[])インストール中に実行可能ファイルの横にあるdllを単純に解凍できないと仮定すると(これが最も簡単なオプションです)、.

DocumentFormat.OpenXml.xml については、私はよく知りませんが、これまでのところ、これは展開ではなく開発にのみ必要であることがわかりました。

于 2013-03-21T17:01:31.640 に答える