9

モジュール性については、自分で解決するために、コンパイル時ではなく、実行時に自分のソリューション内のDLLにリンクしています。ライブラリプロジェクトにブレークポイントを配置すると、クラスがリンクされ、タイプが作成されたときにブレークポイントがトリガーされません。実行時にリンクされたDLLのデバッグ

参考のために、これは反射コードです:Visual Studioがこのシナリオでは、通常のデバッグツールを提供するため

Assembly a = Assembly.LoadFile(FULL_APPLICATION_CACHE + targetVersion + "\\Core.dll"); 
Type engineCoreType = a.GetType("Core.EngineCore"); 
object instance = Activator.CreateInstance(engineCoreType); 

それは可能ですか?これをどのように構成すればよいでしょうか?

+0

[こちら](こちら)(https://stackoverflow.com/a/40524596/465053) – RBT

答えて

8

.pdbファイルが、ロードするDLLと同じ場所にあることを確認する必要があります。 Visual Studioはそのデータをロードし、ブレークポイントで停止させます。

+0

pdbファイルは同じディレクトリにコピーされていますが、依然としてブレークポイントはトリガされません。ブレークポイントにはヒットしません。このドキュメントにはシンボルがロードされていません。しかし、提案に感謝 – Venatu

+1

彼らは同期していないようですね... – Jammer

+0

あなたは正解です!私が使ったコピー方法は、以前のバージョンを上書きしませんでした。 – Venatu

10

デバッガーは、アセンブリの.pdbファイルを見つけることができる必要があります。これはDebugger + Windows + Modulesウィンドウから診断できます。 DLLを右クリックし、シンボルロード情報を選択すると、デバッガがPDBを探す場所が表示されます。

このシナリオでAssembly.LoadFile()を使用すると、読み込みコンテキストなしでアセンブリが読み込まれることに注意してください。高価な言葉では、CLRはDLLがどこから来たのかを気にせず、DLLを複数回ロードすることができます。デバッガがPDBを見つけることができない理由を説明します。常にLoadFrom()を使用してください。

+0

コンテキストを持つことのメリットについてさらに詳しく知りたい場合は、私のところに広げてください。私は前に考えていたものではなく、アドバイスのおかげで – Venatu

+2

これは.NETに関する仲介の本で網羅されています –

関連する問題