ソースファイルがモジュールのビルド時と異なる


103

これは私を夢中にさせています。

変更しようとしているかなり大きなプロジェクトがあります。以前に入力したときにDbCommand、Visual Studioが構文の強調表示を行わず、を使用していることに気付きましたSystem.Data.Common

何も強調表示されていませんが、プロジェクトは私のブラウザーで正常に動作しているようです。そこで、デバッガーを実行して、実際に問題なく機能しているかどうかを確認することにしました。

強調表示を行わなかったクラスが呼び出されるたびに、"the source file is different from when the module was built"メッセージが表示されます。

私はソリューションをクリーンアップして数回再構築し、tmpファイルを削除して、ここにあるすべての指示に従いました。、Webサーバーを再起動しましたが、ソースファイルが明らかに異なる場合でも、ソースファイルが異なることを示しています。

このため、今日作成したコードをテストすることはできません。

  • コンパイルしたばかりのソースがバイナリとどう違うのですか?
  • ビジュアルスタジオに感覚を吹き込む方法はありますか、それとも単に何か不足していますか?

それが少し多かった場合は申し訳ありません。ショートバージョン:プログラムをコンパイルし、それをデバッグしようとすると、Visual Studioから、(コンパイルしたばかりの)ソースファイルがビルドしたモジュールと異なることが通知されます。私はちょうどそれはと思う理由を知りたい
frustratedcoder

回答:


111

異なるソースがエントリポイントを持つソースであるコンソールアプリを実行しているときにこの問題が発生しました(static void Main)。binディレクトリとobjディレクトリを削除し、完全に再構築することでこれは修正されたようですが、コードを変更するたびに、古くなってしまいます。

私がこれを見つけた理由は:

  1. 「スタートアッププロジェクトと実行への依存関係のみをビルドする」をチェックしました(ツール->オプション->プロジェクトとソリューション->ビルドと実行)
  2. 構成マネージャーで、スタートアッププロジェクトの「ビルド」がチェックされていませんでした

(#2の場合-> [デバッグ/リリース]ドロップダウンリストの下のツールバーからアクセスできます。)


7
構成マネージャーのヒントの+1。私はこれを1時間整理しようとしていました、そしてそれだけでした。
Nick Sarabyn 2013年

TFSにはソリューションの複数のブランチがありました。チェックアウトしたすべてのブランチでbinおよびobjディレクトリを削除すると、問題が解決したようです。
スペアバイト2014

私の場合、誤ってsolution platformsからに変更されAny CPUましMixed Platformた!!! 私はそれを元に戻し、Any CPU再び機能します。
vaheeds 2016年

ありがとう、[ソリューション]> [プロパティ]> [構成プロパティ]> [構成]で、私のコンソールアプリ(同じslnでWebアプリのテストを実行する)がオフになっています。
emery.noel

23

私はちょうど同じ問題を抱えていました、私のプロジェクトはすべて同じソリューションにあったので、プロジェクトからプロジェクトへの参照を使用していました。しかし、そうではなかったので、VS2010をビルド、再ビルド、クローズして、ソースコントロールから新しいコピーを取得しました。これはどれもうまくいきませんでしたが、最終的に私が試したのは、プロジェクトを右クリックして、各プロジェクトを個別に再構築することでした。これにより、.dllファイルと.pdbファイルが更新され、デバッグできるようになりました。

ここでの問題は、dllまたはpdbファイルが同期していないことです。


1
あなたは直接言及しませんでしたが、「プロジェクトのアンロード」(再ロード)は私にとってはうまくいきます、ありがとう。
javaLover 2017年

これは私のために働きました:>これはうまくいきませんでした、私が最終的に試みたのはプロジェクトを右クリックして各プロジェクトを個別に再構築することでした。これにより、.dllファイルと.pdbファイルが更新され、デバッグできるようになりました。
Khachatur 2017

プロジェクトをアンロード(再ロード)し、最新のビットをWebサーバー(IIS)に公開すると、うまくいきます。
Jason Tang

5

次の手順を実行します

  1. DLLが生成されるプロジェクトからbinディレクトリを削除するだけです。
  2. プロジェクトをリビルドします。
  3. DLLを参照するプロジェクトから参照を削除します。
  4. 参照を再度含めます。
  5. 楽しい。

4

これらの回答に加えて、パスが間違っているため、新しいDLLを古いDLLに置き換えるときに同じ問題が発生しました。それでもこのエラーが発生する場合は、DLLの間違ったパスを参照していない可能性があります。IISマネージャーに移動し、DLLを使用するWebサイトをクリックします。右側のウィンドウで[詳細設定]をクリックし、エクスプローラーの[物理パス]フォルダーのパスに移動して、このフォルダーを使用してDLLを置き換えていることを確認します。


4

チェックすべきいくつかのこと:

プロジェクト参照を再確認しましたか?

Visual Studioで起動したWebサーバーをまだ実行していますか?システムトレイを確認し、歯車アイコンの付いたページを探します(複数ある場合があります)。

代替テキスト
(ソース:msdn.com

右クリックして閉じます/終了します。複数ある場合があります。変更をデバッグできますか?

デバッグバージョンを実行していますが、リリースバージョンのみをビルドしていますか(またはその逆)?

コンパイルは実際に成功しましたか?「エラーが発生しました。続行しますか?」をクリックしました。気付かずに数回メッセージを送る。


コンパイルは成功します。Visual Studioに関して言えば、私は少し初心者です。デバッグバージョンとリリースのどちらを実行しているかを確認するにはどうすればよいですか?
frustratedcoder

1
@フラストレーション-私は明白なものを排除しようとしていました。リリース中かデバッグ中かを確認するには、ツールバーの「デバッグ」アイコンの横にあるドロップダウンを確認してください。「デバッグ」または「リリース」のいずれかになります。
ChrisF

ありがとうございました。デバッグと言っています。それはそれがあるべきですか?
frustratedcoder

@frustrated-それは良いスタートです;)。リリースコードを「デバッグ」することはできますが、それほど有用ではありませんが、ここでは関係ありません。これは、デバッグバイナリをビルドして実行している(または少なくともそうしている必要がある)ことを意味します。私はもう少し考えなければならないでしょう-実際に問題を見ずに診断するのは少し難しいです。
ChrisF

「実際に問題を見ることなく診断するのは少し難しい」と私は思いました。でも、私は助けに感謝します
frustratedcoder

3

Webサービスでは、Visual Studioの[ブラウザーで表示]コマンドを使用すると問題が発生する可能性があります。これにより、サービスのDLLおよびPDBファイルがbinおよびobjフォルダーに配置されます。クライアントからWebサービスにステップインすると、Visual Studioはbin(またはobj)フォルダーのPDBを使用しますが、プロジェクトの出力ビルドフォルダーのDLLを使用します。いくつかの回避策があります。

  1. Webサービスのbinおよびobjファイル内のDLLおよびPDBファイルを削除してみてください。
  2. Visual Studioで[ブラウザで表示]をクリックしてみてください。

以前にソースファイルの不一致エラーが発生した場合は、Visual Studioがファイル名をブラックリストに追加している可能性があります。ソリューションのプロパティを確認します。ダイアログボックスの左側にある[共通のプロパティ->デバッグソースファイル]を選択します。Webサービスのソースファイルが[これらのソースファイルを検索しない]フィールドに表示されている場合は、削除します。


2

この問題が発生しました。

私は上記すべてを試しましたが、これだけがうまくいきました:

  • ソリューションの.pdbファイルを削除します。
  • 問題のある.objファイルを削除します(ファイルが同期していないと報告されている場合)

ソリューションを構築します。

これにより、すべてのビルドの問題が修正されました。


ここでは.pdbファイルを削除することが重要だと思います。これは、別のブランチから古い.pdbファイルをコピーしたために起こりました。
Danzomida 2014

1

これは、Visual Studio 2010で問題を修正した方法です。

1)「ソリューション構成」オプションを「デバッグ」から「リリース」に変更します。

2)デバッグを開始する

3)デバッグを停止し、「ソリューション構成」オプションを「デバッグ」に戻します。

これでうまくいきました。手順3はオプションです。「リリース」に変更すると問題なく機能しましたが、元に戻したいと考えました。


1

私の解決策:

別のソリューションの既存のプロジェクトを新しいソリューションファイルに含めました。

既存のプロジェクトが再構築されたときに、最終的な出力が新しいソリューションの出力ディレクトリに配置されていることに気付きませんでした。OLDソリューションの出力ディレクトリを調べるように定義されたリンカーパスがありました。

新しいソリューションの出力ディレクトリを検索するようにプロジェクトを切り替えると、この問題が解決しました。


1

この問題があり、コンソールアプリケーションをWindowsアプリケーションとして実行していたことがわかりました。出力タイプをコンソールに戻すと問題が修正されました。


1

私も同じ問題を抱えていました。これを修正するために、「リリースモード」を使用してVS2013でデバッグしました。私はノードjs \ c ++アドオンで作業しているので、これで十分です。


1

エラーの原因となっているファイルを含むプロジェクトをアンロードします。

プロジェクトをリロードします。

修繕



1

私の問題は、ソリューションに2つのプロジェクトがあったことです。2つ目は、1つ目を呼び出すために使用されるテストプロジェクトです。binフォルダーのリリースフォルダーから参照へのパスを選択しました。

したがって、最初のプロジェクトのコードを変更して再ビルドすると、デバッグフォルダー内のdllが更新されますが、呼び出し元のプロジェクトがリリースフォルダーを指していたため、「ソースファイルがモジュールの建った。"

リリースフォルダーにあるメインプロジェクトのdllへの参照を削除し、デバッグフォルダーにあるdllに設定すると、問題は解消しました。


0

ソリューション:-問題は:-ソリューション内のいくつかのプロジェクトが他のいくつかのプロジェクトを参照している場合、一部のプロジェクトのdllが自動的に更新されないことがあります。ソリューションをビルドするたびに、一部のプロジェクトには以前のビルドdllが最新のDLL

手動で移動し、最新のビルドプロジェクトのDLLを参照プロジェクトにコピーする必要があります


0

Visual Studio 2013を使用していて、ソース管理下に既存のプロジェクトがありました。
ソースコントロールから新しいディレクトリに新しいコピーをダウンロードしました。
新しいコピーに変更を加えた後、ビルド時に問題のエラーを受け取りました。

私のソリューション:
1)開くDocuments\IISExpress\config\applicationhost.config
2)virtualDirectoryディレクトリでノードを更新して、新しいコピーにして保存します。


0

私の問題は、プロジェクトにWebサービスがあり、ビルドパスを変更したことです。

デフォルトのビルドパスを復元すると問題が解決しました。


0

私はこれと同じ問題を抱えており、私はここに投稿された他の回答のガイダンスの大部分に従いました。

最終的にIISを開き、Webアプリケーションのアプリケーションプールをリサイクルしました。IISバージョン8.5.9600を持っています。Webアプリケーションを右クリックして、[展開]> [リサイクル]> [アプリケーションプールをリサイクル]> [OK]をクリックします。

これで問題は解決したようで、ブレークポイントは予想どおりにヒットします。binフォルダーとobjフォルダーを削除することでこれを行うと、状況が改善したと思います。

幸運を!


0

これは古い質問であることはわかっていますが、同じ問題が発生したため、他の人の役に立つ場合に備えてここに投稿したいと思います。新しいコンピューターを手に入れ、IT部門が古いコンピューターと新しいコンピューターをマージしました。TFSをセットアップするときに、以前使用していたものとは異なるローカルパスを追加の内部ドライブにマップしました。マージされたデータから古いパスがハードドライブにまだ存在していたため、引き続きビルドして実行することができました。IISパスも古いディレクトリを指しています。IISを正しいパスに更新すると、問題なくデバッグすることができました。対策として、古いディレクトリも削除しました。


0

私もそれを経験しました。プロジェクトのobjフォルダーを開き、デバッグフォルダーを開いて.pdbファイルを削除するだけです。


0

このエラーは、プロジェクトに含まれていないソースファイルを変更しようとした場合にも発生します。

別のプロジェクトの.dllからメソッドをデバッグしていました。.dllは同じマシン上に構築されていて、ソースへのパスを知っていたため、Visual Studioはソースを非常に役立ちました。明らかに、そのようなファイルを変更しても、参照プロジェクトを再構築しない限り、何も起こりません。



0

Visual Studio 2015では、C ++を使用して、the source file is different from when the module was built問題を解決したのは

  • Visual Studioを再起動します。


0

Matlabでmex()を使用して指定した場所が正しいかどうかを確認します(Visual Studioでライブラリを最後にコンパイルした日付に変更されたlibファイルとobjファイルが含まれています)。

そうでない場合:

.libファイルを保存するモードでVisual Studioをコンパイルしていることを確認します。

  1. プロパティ->設定プロパティ->一般->設定タイプ->静的ライブラリ

  2. プロパティ->構成プロパティ->一般->ターゲット拡張子= .lib(exeの代わり)

出力ディレクトリと中間ディレクトリが以下のMatlabディレクトリと一致することを確認してください

  1. プロパティ->設定プロパティ->一般->出力ディレクトリ
  2. プロパティ->構成プロパティ->一般->中間ディレクトリ

0

私の場合、@ Eliottの答えは機能しません。この問題を解決するために、不足しているファイルをプロジェクトから除外/インクルードし、ソリューションをクリーンおよびリビルドしました。

これらのアクションの後、最後に変更したファイルとデバッガーが復元されます。

これがお役に立てば幸いです。


0

この問題は、Visual Studioを使用してデバッグする場合に、アプリケーションがIISによって提供される場合に発生します。(元の開発者がこのプロジェクトをどのように設定したかに関係するいくつかの複雑な理由のため、この形式で開発する必要があります。)

ファイル変更して再構築すると、多くの場合それが修正されます。ばかげているように聞こえるかもしれませんが、コードをデバッグして、しばらく変更していないのになぜ変な動作をするのかを確認しようとしていました。このページから何十ものことを試しましたが、変更するだけで修正されましたファイル..

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.