コードベースでライブラリをしばらく使用していて、ライブラリレベルでデバッグしたいと思っていました。そのために、ソースコードをダウンロードし、プロジェクトを既存のプロジェクトとしてC#ソリューションに含めました。次に、ダウンロードした.DLLの代わりに、他のプロジェクトにそのプロジェクトを参照させました。
DLLの代わりにプロジェクトが参照されたら、デバッガーを介してソリューションを実行し、外部プロジェクトを呼び出す関数呼び出しにステップインしようとしましたが、すぐにステップオーバーしました。デバッグ中に「モジュール」ウィンドウを開くと、DLLのシンボルステータスに「PDBがイメージと一致しません」と表示されていることがわかりました。これは、このプロジェクトをデバッグできない原因である可能性があります。
私の質問は単純ですが、プロジェクトが.csprojファイルを参照として直接参照している場合、PDBがイメージと一致しないのはなぜですか?どのバージョンを実行するかについて、あいまいさがあってはなりません。
DLLを参照し、そのデバッグ情報(PDB)を使用する別のプロジェクトを開いているときにこの問題に遭遇したことがあります。基本的に、他のプロジェクトはPDBのファイルロックを設定します。参照されているプロジェクト。参照されているプロジェクトをコンパイルまたはデバッグすると、最新のPDBファイルの生成に静かに失敗します。
これが発生している場合は、DLLを参照する他のアプリが実行されていないかVSのインスタンスが開いていないことを確認してから、BINフォルダーとOBJフォルダーの下からPDBのすべてのコピーを探して削除し、再コンパイルします。
それがお役に立てば幸いです。
同じ問題に直面しました、それは古いアセンブリと最新のPDBが原因でした。両方の間に不一致がありました。アセンブリは正しくビルドされましたが、ビルド後のdllコピースクリプトは上書き古いものでした。ビルド後のスクリプトからdllを削除すると、問題が解決しました。デバッグが最終的に開始されるときに、dllまたはpdbが最新であることであることを確認する必要があります。
私にとって、これはExcelアドインで発生しました。モジュールウィンドウに移動して、dllが読み込まれなかった理由を確認しました。 .dllが配置されているフォルダーを確認し、その場所に移動しました。その場所に.iniファイルがありました。それを開くと、アプリケーションのインストール場所が明らかになりました。これは、プロジェクトのbin\debugの場所ではなく、「C:\ ProgramFiles \」にあることがわかりました。
基本的に、プロジェクトをデバッグしようとするとロードされていた古いバージョンのアドインがすでにインストールされていました。古いプロジェクトをアンインストールし、「C:\ Users [user]\AppData\Local\Assembly\etc ...」の古い.dllの場所を削除すると、デバッガーが新しくコンパイルされたdllをロードしました。
これは、notepad ++ dllプラグインをデバッグしようとしたときに発生しました。ビルド出力ディレクトリを、notepad ++のpluginsディレクトリに変更し、現在のプロジェクトdllの代わりにnotepad ++を起動するようにデバッガーを設定して、ブレークポイントの設定を続行する必要がありました。 Visual Studio 2019が、デバッグしようとしたプラグインdllのSYMBOLSがロードされていないと言っていたので、これは気が狂いました。
最後に、ここで他の人が示唆しているように、変更された日付と時刻を確認したところ、ビルド出力dllタイムスタンプでpdbが最新ではないことがわかりました。ソリューションを再構築しようとしましたが、手動で削除してビルドを開始しましたが、生成されたpdbのタイムスタンプは同じです。したがって、私がしなければならなかったのは、空白を削除して再構築することによってソースコードを変更することだけでした。出来上がり!今回は、デバッガーにdllのシンボルを自動的にロードさせ、設定されたブレークポイントに到達させました。
たぶん、溶液をきれいにすることもうまくいったかもしれません。
プロジェクトをリリースとしてビルドした可能性があるために発生することがあります。
ソリューションを右クリックし、[バッチビルド]をクリックします>すべてのプロジェクトを確認し、[クリーン]をクリックします