2009-07-15 18 views
91

私の質問の懸念は、私はそれがVS2005のVisual Studio 2008との

で同じことが、私は私のワークスペースに2つのソリューションを持っていることであるべきと仮定したが、AとB

を言います

ソリューションAは、以前のコーディングを終了した古いプロジェクトです。 ソリューションBでは、ソリューションAのいくつかのクラスを使用する必要があります。これを行うには、ソリューションAのいずれかのプロジェクトのdllへの参照を追加します。

問題はデバッグしようとするときです。私はAのコードにもステップインしたいと思っています。 Visual Studioでは、これらのクラスのコードを読み込むことができません(「現在の場所で使用できるソースコードはありません」)ので、逆アセンブリのみを表示できますが、これは有用ではありません。

溶液Aからデバッグクラスに私が知っている唯一の方法は、溶液Bを実行することである、([デバッグ]メニュー項目で)すべてのプロセスを切り離し、溶液A

からプロセスを添付しかし、これは非常に不便であり、一度にA OR Bしかデバッグできません。

参照されたdllのコードにステップインする方法はありますか(ソースコードはありますか)?


ソリューション:私のミスは、私はプロジェクトが唯一の解決策の一部であることが可能であると考えていることでした。実際、プロジェクトは、いくつものソリューションに含めることができます。
古いプロジェクトを参照する必要がある場合は、プロジェクトをソリューションに追加するだけです。これは、ソリューションエクスプローラ>追加>既存プロジェクトで新しいソリューションを右クリックすることで行います。
次に、プロジェクト参照を追加することができます。他の人が書いているように、あなた自身のコード(または変更とデバッグが必要な他のコード)へのdll参照の使用を完全に避けるべきでしょう。

解決策の設計方法については、MSDNを参照してください。

+0

そのMSDNリンクは、(使用するソースコントロールに関係なく).net devsの必読書です。以前はそれを見ていなかったのに驚いています。ありがとう! – Pat

答えて

82

プロジェクトの参照がある場合は、すぐに動作するはずです。

ファイル(dll)の場合は、デバッグシンボル( "pdb"ファイル)がdllと同じフォルダに存在する必要があります。プロジェクトでデバッグシンボルが生成されていることを確認します(プロジェクトプロパティ=>ビルド=>詳細=>出力/デバッグ情報=フル)。 がある場合は、をdllにコピーし、pdbを入れてください。

ファイルをコピーしたくない場合でも、IDEでシンボルを直接ロードすることはできますが、それはもっと機能します。

最も簡単なオプションは、プロジェクト参照を使用することです!

+3

不幸にも、別の解決策からプロジェクトへのプロジェクト参照を追加することはできないと思います。 – Elad

+0

はい、できます。ライブラリの一部のみを新しいソリューションで使用する場合は、すべてのティエムを使用します。 – Wilhelm

+0

どうすればいいですか? 「参照の追加」をクリックすると、「プロジェクト」タブには同じソリューションのプロジェクトのみが表示されます。 – Elad

0

動作する必要があります。私は.exeファイルとdllを同時にデバッグしていました! 1)BプロジェクトにDLLのパスを含める 2)プロジェクトをデバッグするときにコンパイルしてください 3)A DLLファイルとPUBファイルのパスを指すように制御します.... 4)その後、Bプロジェクトのデバッグを開始し、すべてがOKならば、両方のプロジェクトでデバッグできるようになります。

7

覚えておくべきもう1つのポイントは、参照先のDLLがGACにインストールされていないことを確認してください。テストの後、私はシステムレベルのテストを行うために私のDLLをGACにインストールしました。後で、私のコードを再度デバッグしなければならないとき、私はGACからそれらを削除するまで、参照されたアセンブリに入ることができませんでした。

+2

感謝します!これは私の問題でした。私はこれを理解していないとは信じられない: - 私はプロジェクト参照を設定すると、GACにインストールされていたものを何とかオーバーライドするだろうと思った。 – SnookerC

+0

絶対に!これは非常に良い点です。同じバージョンの.NET Frameworkを使用していても、デバッグしようとするとGACにコードがある場合、GACの.PDBファイルとプロジェクトフォルダの.PDBファイルが異なる場合、ブレークポイントにヒットしません。このための解決策は、Un-GACにDLLをインストールし、アセンブリを再構築してから再アセンブリすることです。 –

0

いくつかのソリューションに外部クラスライブラリプロジェクトを含めたくないので、別の方法で消費するアセンブリにステップインします。

私のソリューションには、他のプロジェクトの独自のDLLを含む「Common Assemblies」ディレクトリがあります。私が参照しているDLLには、デバッグ用の付属のPDBファイルもあります。

ブレークポイントをデバッグして設定するには、消費元アプリケーションのソースにブレークポイントを設定します。ここで、アセンブリからメソッドまたはコンストラクタを呼び出してから、メソッド/コンストラクタ呼び出しをINTO(F11)に移動します。

デバッガはアセンブリのソースファイルをVSにロードし、アセンブリ内の新しいブレークポイントをその時点で設定できます。

これは単純ではありませんが、新しいプロジェクト参照を追加したくない場合や、代わりに共有アセンブリを参照したい場合に有効です。

21

私は同じ問題がありました。彼は私が見つけたものです:

1)すべてのプロジェクトは、ツールに同じフレームワーク(これは非常に重要である)

2)を使用している/オプション>デバッグ>一般には必ず「マイコードのみ(マネージド有効にすることを確認してください!ツール/オプション>デバッグ>シンボルで、キャッシュされたシンボルを消去し、デフォルトの "Microsoft Symbol Servers"以外の "シンボルファイル(.pdb)の場所"リストボックスのすべてのフォルダの位置を解除して削除します。 「このディレクトリのキャッシュシンボル」テキストボックスの静的パスを削除する「空のシンボルキャッシュ」ボタンをクリックし、最後に「指定されたモジュールのみ」ラジオボタンがオンになっていることを確認してください

4)すべてのプロジェクトの[ビルド/構成マネージャ]メニューで、構成がデバッグモードであることを確認します。

+2

私の問題は、私の2つのプロジェクトが異なる.Net Framework:4.0と4.5を使用していたことでした。 Tx! – user627283

+1

これは私のために働いた。 –

2

参照先のDLLのソースコードにブレークポイントを設定する場合は、まずpdbファイルがあることを確認します。次に、関連するソースコードファイルを開いてそこにブレークポイントを設定するだけです。ソースファイルは、ソリューションの一部である必要はありません。 説明:How can I set a breakpoint in referenced code in Visual Studio?

ブレークポイントは、[デバッグ] - > [Windows] - > [ブレークポイント]で利用できます。

このアプローチには、既存のプロジェクトをデバッグ目的のためだけにソリューションに追加する必要がないというメリットがあります。残しておくと、多くのビルド時間が節約されます。明らかに、その中に1つのプロジェクトだけを持つソリューションを構築することは、それらの多くを持つソリューションを構築するよりはるかに高速です。

+0

これは、ブレークポイントを配置した外部ファイルがPDB内の正確なパスと一致する場合にのみ機能します。 (たとえば、マシンにDLLを作成した場合にのみ動作します)。 –

1

ステップ1:ツールへゴー - >オプション - >デバッグ

ステップ2:のチェックを外しがマイコードのみ有効

ステップ3:のチェックを外し、正確にソースファイルが必要オリジナルとの一致バージョン

ステップ4:ステップオーバーのプロパティと演算子のチェックを外す