1

Visual Studioで開発しているデスクトップアプリケーションがあり、アプリのごく一部をより頻繁に更新する必要があります。毎回新しいインストーラーをデプロイするという不便さを避けるために、頻繁に更新されるサポート関数を別のプロジェクトに分割し、DLLとしてコンパイルしました。デスクトップアプリは、実行時にリフレクションを使用してこのDLLをロードし、次のようなインターフェイス定義を使用して共有DLLに基づいてオブジェクトをインスタンス化します。

Assembly a = Assembly.LoadFrom(supportDLLPath);
ISupportModuleInterface obj = (ISupportModuleInterface)a.CreateInstance("SupportCode.SupportObject");
if (obj != null)
{
    obj.OnTransferProgress += new FileTransferProgressHandler(obj_OnTransferProgress);
    obj.OnTransferComplete += new EventHandler(uploader_OnTransferComplete);
    obj.DoWork(packagePath)
}

ほとんどの場合は正常に動作しますが、問題をデバッグする必要があり、VisualStudioデバッガーを確実にステップインさせることができません。DoWorkにステップインするときなど、コードを介してF11キーを押すと、システム上のDLLのソースコードが自動的に検索されて表示されることがあります。ただし、イベントが発生すると、Visual Studioはコールスタックに[外部コード]マーカーを表示するだけで、サポートプロジェクトのコード内を移動できません。

サポートプロジェクトを適切にデバッグできるように、これを修正する方法について誰かがアイデアを持っていますか?ありがとうございました!

4

2 に答える 2

1

アセンブリは[モジュール]ウィンドウ([デバッグ]->[ウィンドウ]->[モジュール]、または[Ctrl-D、M]を押す)に一覧表示され、[シンボルが読み込まれました。]として一覧表示され、シンボルは自分の場所から読み込まれますか?予想?(右クリックして[シンボルのロード...]を選択すると、シンボルを強制的にロードできます。一致するシンボルファイルが見つからない場合は、[開く...]ダイアログが表示されます)。

また、このウィンドウで、モジュールが2回ロードされていないこと、およびアセンブリのバージョン/タイムスタンプ/場所が期待どおりであることを確認してください。

最後に、[ツール]->[オプション]->[デバッグ]で[JustMy Code]がチェックされているかどうかを確認し、チェックを外すと違いが生じるかどうかを確認します。

于 2009-06-02T19:37:14.873 に答える
0

分解に足を踏み入れることができますか?もしそうなら、私が覚えていることから、それはあなたにpdbが作成されたときのソースコードがあった場所へのパスを与えるでしょう。NHibernateをデバッグするためにこれを行う必要があり、「pdb」ファイルが作成されたときの正確なパスにソースコードを配置する必要がありました。その後、問題なくソースコードにステップインできました。

于 2009-06-02T19:24:08.237 に答える