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

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

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

はじめに

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

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

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

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

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

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

エラーについて

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

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

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

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

新人プログラマ(半年目)だから、反論することはできなかったのです。

とりあえずエラーメッセージ出たらググる習慣ついているからググると、
見当違いのことを言っているひとたちがわりと多い……というかそもそも情報が少ない。

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

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


んで「これはVisual Studioのバグだ!」
と言ってる人が割といるっぽい。なにそれこわい。

バグじゃない

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

こうすれば良い。絶対できるという風ではないし、ひょっとしたら本当にVisual Studioのバグかもしれないけど。

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

 

C#にも限らずJavaEclipseもそうなんだけど

IDEは魔法の箱じゃなくて、ただの「ぼくがかんがえたさいきょうのテキストエディタ」だからです。

*1

 

まぁEclipseは本当にバグで落ちるし割と不具合ある。というかJavaがもごもご……
*2


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

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

ことが可能性としてあげられるような気がします(むかしの自分)


これってビルドに限らず、わりとよくあることなんじゃないかなぁと思います。


見直すべき点

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

たぶんこれでなおる。
再起動したりリビルドしか対処してなかった人はたぶんなおる。

vc.projとか見なくていいと思う。

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

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

objディレクトリ消したら原因判明するんじゃないかな。

とりあえずGNU makeかじっといて良かったなと思った。

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

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

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

stackoverflow.com

*1:追記:Eclipseは最近めっきり見なくなりました。IntelliJ IDEAが主に用いられてる気がします

*2:追記:Javaは1.8からかなり使いやすくなりました。今後Java1.9でより良くなり、kotlinとかも登場しています。Javaをdisってた当時のぼくの技術力がクソだったということで勘弁して下さい