へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)! #vZkt8fc6J

Visual Studioの「ソースコード が元のバージョンと異なります」のエラーの解決法について

はじめに

2015/04/23修正
エラーの文言でYahoo検索するとトップに来るようになったので、レイアウトと若干ですが文言を修正してみやすくしました。

それにしてもなぜYahooから来るのだ……

ちなみに今はニートです。

2016/09/04修正
一部の不適切な表現を修正して柔らかい表現に変更しました。
現在はC#VB.NETはメインでつかっておらず、仕事では主にPythonJavaScriptを使い、趣味でJavaLuaなどを使っています。

なのでこの情報については未だ古いままです。

ちなみに今は働いてます。

 

2018/12/13修正

読み直してて不快だった部分を削除したり修正したりしました。

エラーについて

先日VIsual Studioを使っていたら、

ブレークポイントは、現在の設定ではヒットしません。  ソースコード が元のバージョンと異なります

というエラーが出ました。

「勝手にプロジェクト構成変えやがって!!!だから変なエラー出るんだ!ビルドパスか何か変えただろ!!」とエラーを出してた人にキレていたんだけれど、
まぁそれはそういうプロジェクト構成にしなければいけないので直しました。

とりあえずエラーメッセージをググるとそもそも情報が少なくて困っていました(当時の話です)

情報が間違ってるのもあって、そういう人たちはおそらく一次情報である
マイクロソフト公式のコレ(↓)か、コレを見た人が書いた二次情報を見ていたのかな?と思いました。

その他にも、ソース ファイルが存在するのに、ブレークポイントに関連するソース ファイルの場所をデバッガが特定できないことがあります。この問題が発生するのは、ソース ファイルが変更され、デバッグ中のコードと一致しなくなっているときです。デバッグ中のバージョンと一致しないソース コードを Visual Studio に表示するには、[オプション] ダイアログ ボックスで、[全般] カテゴリの [デバッグ] ノードにある [元のバージョンと完全に一致するソース ファイルを必要とする] をオフにします。また、[ファイルのブレークポイント] ダイアログ ボックスの [元のバージョンと異なるソース コードを許可する] をオンにして、ブレークポイントを関連付けることもできます。


んで「これはVisual Studioのバグだ!」
と言ってる人もいるっぽいですが、バグではないと思います。

 

このエラーにたどり着く方法は何通りもあるっぽいので、具体的にコレコレをしたら良いという方法はないけれど、
ちょっとだけ解決のお手伝いしたいと思います。


まず、ビルドについて
「なんかよくわからんけどVisual Studioががんばってビルドしてくれてる」という考えを持っていると、詰んでいる原因はたぶんそれかもしれないです。

 

IDEに頼りすぎているとそういう感じになりがちだと思います。

 

「急にできなくなった!」際は、

  • 急にできなくなったんじゃなくて、前からできてなかったけど、偶然できていた
  • 自分では変更してないと思い込んでるけど、変更していた(特にソースではなく設定)
  • 誰かに勝手に変えられた
  • ライブラリが増えた・減った
  • ライブラリのバージョンが違う
  • メッセージが出てたけど、英語だし、読んでもよくわからないのでとりあえず読まずにOKやYesを押してた

ことが可能性としてあげられるような気がします


見直すべき点

見直すべき点としていくつか考えられます。

 

①ソリューション内の全プロジェクトについてビルドクリーン。昔のアセンブリが残っている可能性がちょっとある。
②プロジェクトのプロパティでビルド出力先が全て正しいかどうかを確認する。
③ビルドの順序が正しいかどうか確認する。(アセンブリの依存関係とか)
④ビルド構成マネージャーから、「ビルド」にチェックが入っているかどうかを確認する。
⑤各プロジェクトの参照設定で、正しいパス(「注意マークが出ていなければおっけぃ」ではなくて)をさしているか見直す。特に、各プロジェクト間での参照が失敗しているケースが一番ありうる。

たぶんこれでなおるのではと思います。

vc.projとかを見なくてもいいと思います。

これでも直らない場合は、
VSって、デバッグの際に

objディレクトリとか生成してその中にdllとか生成してるから
なんかそのへんが怪しそうな気がします(てきとう)

objディレクトリ消したら原因判明するかもしれません。

追記(2016/09/04):
日本語情報では他に
「コメント行追加したらなぜか直った」とか

プロジェクトのプロパティ→C++→全般について
デバッグ情報の形式を「C7 互換 (/Z7)」に変更したらなぜか直った」とか

がありますが、それでも直らない場合は
「The source code is different from the original version.」でググると見つかるかもしれません
おすすめは↓です。34個も回答があります。

stackoverflow.com