8

単一の .NET アセンブリを完全なアセンブリのサブセットに分割するユーティリティはありますか? つまり、ILMerge.exe の「機能の逆」ですか?

もちろん、このツールは、クラスや関数などの間の依存関係などを追跡する必要がある場合、作成が困難になります。

ただし、私が探しているのは、ほとんどが静的クラスと静的メソッド、基本的には単なる関数ライブラリを含む非常に大きな (数百 MB) 混合モード アセンブリがある場合です。ただし、いくつかの DLLMain の初期化などがあります。

私が望むのは、サブセットアセンブリに保持したい特定の静的クラスで静的メソッドのリストを指定できるようにすることです。技術的には、アセンブリは標準化された形式の単なるバイナリ情報であるため、これは可能です。

それで、これは存在しますか、またはどのようにこれを作ることができますか? または、なぜこれが非現実的でしょうか?

4

1 に答える 1

3

いいえ、このツールが存在しない可能性は非常に高いです。ただし、ツールがないことを積極的に反証することはできません。

いずれにせよ、これらの IL 書き換えトリックは混合モードのアセンブリでは機能しません。ILMerge もそれらをサポートしていません。このようなアセンブリには、IL が含まれているだけでなく、マシン コードと再配置テーブルも含まれています。マシン コードを簡単に区別する方法はありません。これは主に、純粋なコードではなく、データも含まれているためです。switch ステートメントのジャンプ テーブルと同様です。また、母国語でコードを書くプログラマーが難読化ツールを気にしない理由でもあります。機械語コードの逆コンパイルは時間を大幅に浪費し、常に不完全です。

そのため、ネイティブ コードが多く含まれているため、アセンブリが大きくなっている可能性があります。プロジェクト レベルでこれに取り組み、この mongo プロジェクトを小さなプロジェクトに分割して、それらの間でソース コードを配布する必要があります。それは仕事です。また、常に簡単であるとは限りません。これを行うと、リンカ エラーがよく発生します。また、エクスポートできるようにコード宣言を変更する必要がある可能性があります。これを行う唯一の方法は、最初から開始し、最初にサブセクションを分割して、それほど大きくないアセンブリと小さなアセンブリを作成することです。すすいで繰り返します。コストに注意してください。多くのアセンブリは、プログラムのコールド スタートを遅くします。

于 2013-05-31T13:03:41.127 に答える