6

を使用してプラグイン DLL をロードする製品のプラグインを作成していますAssembly.Load(byte[])。これはまったく問題ありませんが、デバッグ シンボルをロードしてコードをステップ実行する従来の方法がないことを意味します。

クレイジーなことは、数か月前にまったく同じ問題を抱えていて、それを解決していたことです-そして、少年は自分自身を誇りに思っていました! だから私はそれができることを知っています、私はちょうど方法を忘れていました!

私が試したかもしれないことについて、いくつかの漠然とした記憶がありますが、詳細を頭から引き出すことはできません。

  • .NET リフレクター
    • ただし、元の .cs ファイルをステップ実行したことをはっきりと覚えているため、おそらく間違っています。
  • Cassini ではなく IIS Express を使用する
    • しかし、これは奇妙な解決策だと思います.アセンブリはバイト配列からロードされるため、フレームワークはDLLがどこから来たのか、または適切なPDBが見つかった場合にどのように見えるかについて何も知りません. この問題は、どの環境にも存在するはずです。
  • 「モジュール」ウィンドウからシンボルを手動でロードする
    • これを試しました。「シンボル ファイル xxxxx.pdb がモジュールと一致しません」というメッセージが表示されます。もちろん、DLL 自体ではなく、バイト配列からロードしているためです。
4

1 に答える 1

1

アセンブリに厳密な名前が付けられている場合は、アセンブリを GAC に配置できます。厳密に名前が付けられたアセンブリは、 経由で読み込まれた場合でも、常にAssembly.Load(byte[])GAC から読み込まれます。次に、in 記号を inC:\Windows\symbols\dllまたはどこでも便利な場所に配置します。同様の方法で別のアプリケーションによってロードされた自社製品のプラグイン DLL をデバッグするために、私は常にこれを行っています。

を使用gacutilして GAC にインストールできます。デバッグが完了したら忘れずに削除してください。そうしないと、GAC して忘れていた古いバージョンに対してテストを実行することになる可能性があります。

于 2012-10-22T07:09:09.393 に答える