2011-10-20 13 views
5

私はAssembly.Load(Byte[])で動的に読み込まれたアセンブリをデバッグするのですが、私はいくつかの問題に直面しています。デバッグ動的にロードされたアセンブリ

まず、Visual Studio 2010の黄色い矢印を他のコード行に移動することはできません。また、しようとすると例外が発生します(「オブジェクトインスタンスでメソッドを見つけることができません」)。サードパーティのライブラリからオブジェクトのクイックウォッチを行います(たとえば、インフラジスティックスから制御します。)

Dim data = My.Computer.FileSystem.ReadAllBytes(file.FullName) 
Assembly.Load(data) 

Assembly.Load(String)を使用する場合、すべてが正常に動作し、問題はありません。

Assembly.Load(IO.Path.GetFileNameWithoutExtension(file.Name)) 

なぜ行動がそれほど異なるのですか?とにかくこれを修正するには?

Assembly.Load(byte []。byte [])を使用してアセンブリのデバッグシンボルをロードしようとしましたが、サードパーティライブラリからオブジェクトをデバッグしようとしても例外が発生します。

答えて

10

アセンブリのデバッグシンボルがアプリケーションドメインにロードされていません。バリエーションを使用すると、.NETは指定したファイル名の横にある.PDBを自動的に探します。

そうのように、Assembly.Load(byte[], byte[])を使用して、バイト配列からアセンブリそのシンボルをロードするには:

Dim data = My.Computer.FileSystem.ReadAllBytes(file.FullName) 
Dim pdbData = My.Computer.FileSystem.ReadAllBytes(pdbFile.FullName) 
Assembly.Load(data, pdbData) 
+0

私はこれを試してみました、そしてシンボルが読み込まれてしまったが、私はまだ依存関係からクラス/オブジェクトに問題がありますこのアセンブリの –

+0

依存関係も手動で読み込む必要があります。あなたのケースでは、[AssemblyResolve](http://stackoverflow.com/questions/22012/loading-assemblies-and-its-dependencies/22026#22026)イベントを購読することが役に立ちます。 – ladenedge

+0

あなたの正確な、ありがとう –

1

バイトの配列を渡すと、元のコード行情報でPDBファイルを見つけることができないので、どのファイルから来るのか(ファイルから来たものでも)を知る方法がありません。

byte[]をファイルとして保存し、同じファイル名のPDBがあることを確認して修正できます。

関連する問題