現在VS2008からVS2010に移植しているC++プロジェクトがあります。プロジェクトをビルドすると、Visual Studio 2010はビルドが成功したと報告しますが、F5キーを押してデバッガーを起動すると、プロジェクトが最新でないと通知されます。この警告を無視すると、デバッグを続行できますが、[ok]を押すと、プロジェクト全体(何百ものソースファイル)が最初から再構築されます。出力には以下が含まれます。
1>------ Build started: Project: SCCW-VC2010, Configuration: Debug Win32 ------
1>Build started 15/11/2010 14:47:40.
1>InitializeBuildStatus:
1> Creating "Debug\SCCW-VC2010.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>Midl:
1> All outputs are up-to-date.
1>ClCompile:
1> tinedit.cpp
1> _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
1> Automatically linking with sfl504d.lib
1> Automatically linking with ot1104d.lib
1>c:\program files\rogue wave\stingray studio 10.4\include\toolkit\sectndlg.h(134): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\Microsoft visual studio 10.0\vc\include\string.h(105) : see declaration of 'strcpy'
1> Automatically linking with og1204d.lib
1> Automatically linking with RWUXThemeD10.lib
1> profile.cpp
1> ZOffsetDialog.cpp
30分後、ビルドが完了するとデバッガが起動します。私の推測では、メッセージは
「AlwaysCreate」が指定されたため、「Debug\SCCW-VC2010.unsuccessfulbuild」を作成しています。
問題の一部ですが、これをプロジェクト設定に関連付けることはできません。私は googleのいくつかのヘルプ を見つけましたが、これまでのところ機能していません。他の誰かがこの問題を抱えていて、修正を知っていますか?
編集:以下のコメントでのJalfの提案に従って、新しいプロジェクトを作成し、すべてのファイルをそのプロジェクトにインポートしました。新しいプロジェクトには同じ問題。具体的には、以下のすべてのグループをコピーしました。
<ClCompile Include="..\MyDir\MyFile.cpp"/>
<ClInclude Include="..\MyDir\MyFile.h" />
<None Include="res\MyFile.ico" /> (and all similar resources)
<Library Include="..\MyDir\MyFile.lib" />
Edit2:すべてのヘッダーインクルードを調べた後、最終的には存在しない3を見つけました。それらを削除し、元のプロジェクトですべて再構築することで問題が解決したようです。この問題について言及しているブログ投稿のいくつかは、それをバグと呼んでいますが、2日後に時間を失ったため、私は同意する傾向があります。提供された回答とコメントをありがとう。
Edit3:そして1日後に問題が戻ってきました!プロジェクト内の任意のファイルを編集すると、完全に再構築されます。 John Diblingの回答によると、プロジェクトにはStingrayを含むいくつかの静的ライブラリが含まれています。締め切りがありますので、VS2010を廃止してVS2008に戻ります。関連情報については、次のリンクを参照してください。
VS2010は常にプロジェクトが古いと見なしますが、何も変更されていません
http://social.msdn.Microsoft.com/Forums/en-US/vcgeneral/thread/38c08137-3bb0-4143-b97f-72d077646318
http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx
最終編集VS2010 SP1のリリースでこの問題が解決され、ビルドが高速で効率的になりました。
私はこの問題を何度も経験しており、常にイライラさせられました。私の場合は何が問題だったのかをお話ししますが、最初にあなたに尋ねなければなりません:
私の場合の問題はやや複雑でした。 Stingrayのバイナリを、ソースディレクトリ(それらが存在する場所)からビルドツリー内のディレクトリにコピーするカスタムビルドルールがありました。バイナリは依存関係としてマークされたため、変更された場合に備えて各ビルドの前にコピーされました。
依存関係チェックでは、これらのファイルのタイムスタンプを調べて、いつ変更されたかを確認しました。 blah.lib
のソースディレクトリにmodの日付が昨年12月だった場合、コピーされたときに同じmodの日付になります。依存関係をチェックすると、「このファイルはかなり古いので、再構築する必要があります」というメッセージが表示され、完全な再構築を実行するかどうかを尋ねられます。
しばらくの間、「いいえ」と言って問題は解決しましたが、最終的には、ファイルのコピーを行った後にカスタムビルドルールを変更して新しいテキストファイルを書き込むことで問題を修正しました。これにより、新しいテキストファイルがblah.lib
ファイルではなく依存関係になり、コンパイラーが満足できるものになりました。
出力ウィンドウでどのファイルが再構築されているかを確認します
メニューTools
-> Options
に移動してから、Project and Solutions
-> Build and Run
に移動します。オプションMSBuild Project build output verbosity
を次のように変更します。
Diagnostic
ビルド、長いログを取得
ログからファイル(1から)を見つけ、診断を読み取ります。たとえば、将来の日付があるか存在しないヘッダー名が見つかるかもしれません。
変換プロジェクトとゼロからのプロジェクトの両方で同じ問題が発生しました。 MSページから不足しているファイルについてのヒントを得ました。プロジェクトを確認したところ、存在しないファイルを参照していることがわかりました。正しいファイルに置き換えれば、問題はなくなりました。
私はこれが非常に古い投稿であることを知っていますが、まだこの問題を抱えているすべての人のために、私の投稿を投稿することにしました。 「AlwaysCreate」が指定されたのは、プロジェクトの再構築とは関係がないためです。
ITはその逆です。あなたまたはVisual Studioがすべてを再構築することを決定した場合、これにより「* .unsuccessfulbuild」ファイルが作成されます。
"AlwaysCreate"が指定されているため、他の問題(通常は存在しないヘッダー)によってすべてが再構築され、表示につながります。
"AlwaysCreate"はVisual Studioビルド環境設定の一部であり、Microsoft.CppBuild.targets XMLファイルの一部です。次の行が含まれています:Touch AlwaysCreate = "true" Files = "$(LastBuildUnsuccessful)" /
これがtrueに設定されている場合、「。unsuccessfulbuild」ファイルは、ビルドが成功したかどうかに関係なく常に作成されます。これがfalseに変更された場合、「。unsuccessfulbuildは作成されません。trueの場合、* .unsuccessfulbuildファイルは、ビルドプロセスの実行中は空として作成され、ビルドが成功した場合は削除されます。このファイルが作成された理由はわかりません。ビルドにエラーがある場合でも、ファイルは空ですが、削除されません成功したビルド。
このファイルの存在は、VSビルド環境だけが知っている意味を持つ可能性があります。この設定でプレイしたい場合は、タッチキーを
MSDN docs は、このプロパティがデプロイメントプロジェクトに固有であることを意味します。
findstr /si AlwaysCreate
VS2010プロジェクトファイルでは、GUIで追跡できない場合、原因を示す必要があります。
絶えず再構築する「正当な」理由(たとえば、欠落しているヘッダーファイルへの参照)がない場合は、ソリューションの.sdf
ファイルを削除して(もちろんソリューションが閉じている場合)、再構築してみてください。それだけでうまくいきました。
リンクはここのコメントの1つにありますが、見逃しやすいので、このリンクから基本的な手順をここに再投稿します。 MSDN Article
実際、私はこのリンクを自分で見つけましたが、後になってこれがすでにここで言及されていることに気づきました。
1. Since it can be difficult to recover from a damaged devenv.exe.config file, consider copying the file to devenv.exe.config.original before modifying it so you have a backup copy you can revert to if things go awry.
2. Open your VisualStudioInstallFolder\Common7\IDE\devenv.exe.config file. Note this will be in %ProgramFiles(x86)% on 64-bit Windows.
3. Open a text editor with admin privileges.
4. Add this snippet to your devenv.exe.config file just below the <configSections /> block:
For Visual Studio 2012 and below...
<system.diagnostics>
<switches><add name="CPS" value="4" /></switches>
</system.diagnostics>
For Visual Studio 2013
<system.diagnostics>
<switches><add name="CPS" value="Verbose" /></switches>
</system.diagnostics>
5. Save the text file.
Visual Studio 2010 + SP1を使用していますが、両方のXMLスニペットが機能しているようです。
DebugView のようなウィンドウのDebugOutputを表示できるツールが必要です。
1. Start DebugView
2. Rebuild
3. Build
4. In DebugView window search for the string ‘missing’ or 'not up to date', better still to save the DebugView log entries and open it in notepad and then search.
SP1のリリースバージョンでこれを再検討することを決定しました。新しいプロジェクトをゼロから再作成しました。これは、あらゆる種類のジャンクを運んでいたアップグレードされた古いプロジェクトである1.4MBと比較して、81kで発生しました。最初は同じ問題に遭遇しましたが、次のようにしてなんとか解決しました。
次に気づいた問題は、リソースを追加すると、resource.hを含むすべてのファイルが再コンパイルされることでした。これは、次の Microsoft接続スレッド のアドバイスを使用して修正し、プロジェクトに次の行を手動で追加しました。
<ItemGroup>
<ClNoDependencies Include="Resource.h" />
</ItemGroup>
解決策devenv.exe.configの変更+ DebugViewの使用が私(vs2010)で機能しました。
DebugView 不足しているファイルをリストします。
私の場合、展開プロジェクトの構築に役立つようです。ヒットしたときにビルドしないように設定しました F7 しかし手動で。新しいソリューション+プロジェクトの作成を提案する人もいますが、プロジェクトに手動の微調整やカスタムビルドルールがたくさんある場合、これはあまり良いオプションではありません。