Visual Studioでデバッグをしているとダイアログボックスが出てこんなメッセージが表示されることがあります。
「ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?」
一応、質問文なのでダイアログボックスには「はい」と「いいえ」のボタンがあるのですが、どちらを押しても結果は同じです。
デバッグできない
「はい」を選ぼうが「いいえ」を選ぼうが、Visual Studioはこんなダイアログボックスを表示します。

「現在の場所のソースコードを表示できません。」
ご丁寧に「逆アセンブルの表示」なんてボタンがついていますが、今時、誰がアセンブラでデバッグなんてするのかと・・・。
Visual Studioのソリューションエクスプローラーなどからソースコードを表示してみてもブレークポイントもかけられないし、デバッグでそのソースコードの関数にステップインすることもできません。
これではデバッグ作業ができません。
原因と解決方法
こうなってしまうのにはいくつか原因があるようで、原因によって取るべき解決方法は違ってきます。
ソースファイルよりモジュールのほうが古い
ソースコードを間違って編集して保存してしまったとか、何らかの原因でデバッグ中のモジュール(DLLやEXE)が古い場合。
この場合、Visual Studioの言っていることは正しいです。
まずはイの一番にこれを確認すべきでしょう。
ソースファイルのタイムスタンプとデバッグ対象のモジュールのタイムスタンプを調べます。
ただ、この場合は「ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?」で「はい」と答えるとソースコードは表示されるんですよね。
そうやって表示させるとソースコードとモジュールが合ってないのでデバッガでの停止位置がずれたりするものの、なんとかデバッグはできます。
解決方法はもちろんビルドし直して、ソースファイルよりモジュールのタイムスタンプが新しくなることを確認することです。
ビルドし直してもモジュールのタイムスタンプが変わらない、なんて場合はデバッグ以前にビルド設定が何か間違っています。
MSDN blogの方法?
マイクロソフトのMSDN blogにこんな記事があります。
ググッてこの記事を見つけて、なんだ原因と解決方法が公式サイトにあるじゃん、と思うのは甘い。
この記事の方法とは、
というものです。
この設定を行うとたしかにソースコードが表示されるようになることはあります。
おそらく表示されないのはVisual Studioのバグで、この設定でそのバグを回避できるのでしょう。
しかし、この設定は前述の「ソースファイルよりモジュールのほうが古い」状態でも常に強引にデバッグをする、というためのものです。
この設定をするとソースコードとモジュールの整合性が取れてなくても警告が出なくなってしまいます。
ncbファイルが壊れている
Visual Studioは拡張子ncbのファイルにさまざまな情報を保存しています。
このncbファイルは何かの拍子に壊れてしまうことがあるようで、Visual Studioの挙動がどうもおかしい時はVisual Studioを終了し、ncbファイルを削除することで治ることがあります。
Visual Studioは起動時にncbファイルがないと再度生成します。
「ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?」の場合もncbファイルの削除で治る場合があります。
時々、ncbファイルが壊れるのは大昔からあってVisual Studioのバグなんでしょうけど、一体いつになったら治るのでしょうか・・・。
ソースファイルがシフトJISだとダメ?
ソースコードをビルドし直しても、ncbファイルを削除しても治らず(もちろんMSDN blogの方法などやる気はありません)途方にくれていた時、試行錯誤でソースコードをシフトJISからUnicode(UTF-8 シグネチャ付き)に変更したら治ってしまったことがあります。
Unicodeで保存し直す方法はVisual Studioの「ファイル」 - 「保存オプションの詳細設定」メニューで「保存オプション」の詳細設定を開き、「エンコード」コンボボックスで「Unicode(UTF-8 シグネチャ付き)」を選択します。
今のところ、この方法で解決しなかったことはありません。
このことから「ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?」が表示されるVisual StudioのバグとはシフトJISのソースコード処理に関連するのではないかと疑っています。