2

最近、Reflection、Reflection.Emit、CodeDomを使い始めました。私のコーディングの目的は、アセンブリ( "C:\ Temp \ MyAssembly.exe"など)をロードし、そのクラスとメソッドを読み取ることです。これは実行されましたが、「MyAssembly.exe」のコピーを「MyAssembly.dll」に保存することに興味があります。その理由は、コードをインストルメント化し、メソッドにいくつかの変更を加えたいためです。新しいアセンブリを作成して保存する方法は知っていますが、拡張子が.exeから.dllの既存のアセンブリ(すべてのクラスとメソッドを含む)を「複製」できるかどうかはわかりません。

アドバイスをいただければ幸いです。ありがとう。ピーター

4

1 に答える 1

0

「MyAssembly.exe」のコピーを「MyAssembly.dll」に保存するだけであれば、それほど問題にはならず (たとえば、File.Copy を使用)、Reflection や Reflection.Emit は必要ありません。

しかし、コメントが明らかにしているように、問題は「MyAssembly.exe」の変更されたコピーを別のファイル名に保存することです。Reflection.Emit を使用して既存のアセンブリを変更することはできませんが、他のオプションがあります。

  • CecilMicrosoft CCIなどのサードパーティ ツールを使用して、アセンブリを読み込み、変更し、別の名前で保存できます。
  • .NET フレームワーク/SDK に含まれている IL 逆アセンブラーと IL アセンブラーを使用して、アセンブリを逆アセンブルし、変更してから再アセンブルすることができます。
  • 理論的には、おそらくアセンブリをロードし、Reflection を介して分析し、Reflection.Emit を使用して完全に同等の新しいアセンブリを放出することができます。ただし、これを正しく行うには膨大な作業が必要になるため、私はその方法をとりません。
于 2012-10-15T14:08:45.370 に答える