14

次の方法でアセンブリをロードしたい

var loadedAssembly = Assembly.Load(File.ContentsAsBytes);

File.ContentAsBytes は、byte[]次の方法で dll を として返します。

System.IO.File.ReadAllBytes("dll location");

問題は、ロードされたアセンブリ ( loadedAssembly) が物理的な場所を失うことです

  • loadedAssembly.CodeBase - ロードしているアセンブリに設定されています (これは正しくありません)。
  • loadedAssembly.Location - 空です

からロードしbyte[]て同様の結果を得るAssembly.LoadFile方法はありますか?AppDomain.CurrentDomain.AssemblyResolve

4

3 に答える 3

2

byte[]をメソッドに渡すと、そのバイト配列には、メソッドがどこから来たのかをAssembly.Load示唆する情報さえまったくありません。それは単なるバイトの集まりです。Loadファイルを別の場所にコピーした場合も同様です。

File.Copy(dllLocation, anotherLocation);
var asm = Assembly.LoadFile(anotherLocation);

anotherLocationアセンブリが元々 にあった場合でも、アセンブリの場所は を指しdllLocationます。同様に、アセンブリ バイトをロードすると (基本的にアセンブリをディスクからメモリにコピーします)、これらのバイトの "場所" はメモリになります。

于 2013-05-16T20:55:20.077 に答える