Visual Studio 2010は常にプロジェクトが古いと見なしますが、何も変更されていません


194

ここで説明するように、私は非常に似た問題を抱えています

また、C ++ / CLIとC#プロジェクトの混合ソリューションをVisual Studio 2008からVisual Studio 2010にアップグレードしました。VisualStudio 2010では、1つのC ++ / CLIプロジェクトが常に古くなっています。

直前にコンパイルおよびリンクしてF5ヒットした場合でも、「プロジェクトは古くなっています。ビルドしますか?」というメッセージボックスが表示されます。が表示されます。DLLファイルの階層が非常に低く、ソリューションのほとんどすべてのプロジェクトを強制的に再構築するため、これは非常に煩わしいです。

私のpdb設定はデフォルト値に設定されています(この問題の推奨される解決策)。

Visual Studio 2010が強制的に再構築を強制したり、プロジェクトが最新であると考える理由が考えられますか?

Visual Studio 2010がそのように動作する他のアイデアはありますか?



回答:


224

Visual Studio / Express 2010のみ。VS2012、VS2013などの他の(より簡単な)回答を見る

不足しているファイルを見つけるに、記事「C ++プロジェクトシステムログを有効にする」の情報を使用して、Visual Studioでデバッグログを有効にし、再構築の原因を通知します

  1. devenv.exe.configファイルを開きます(%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\またはにあります%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\)。Expressバージョンの場合、構成ファイルの名前はV*Express.exe.configです。
  2. </configSections>行の後に以下を追加します。

    <system.diagnostics>
      <switches>
        <add name="CPS" value="4" />
      </switches>
    </system.diagnostics>
    
  3. Visual Studioを再起動します。
  4. DbgViewを開き、デバッグ出力をキャプチャしていることを確認します
  5. デバッグしてみてください(Visual StudioでF5キーを押します)
  6. デバッグログで次の形式の行を検索します。

    devenv.exe情報:0:ビルド入力 'Bla \ Bla \ SomeFile.h'がないため、プロジェクト 'Bla \ Bla \ Dummy.vcxproj'は最新ではありません。

    (私はCtrl + Fを押してを検索しましたnot up to date)これらは、プロジェクトを永続的に「古くする」原因となる参照になります。

これを修正するには、不足しているファイルへの参照をプロジェクトから削除するか、参照を更新して実際の場所を示します。

注:2012以降を使用している場合、スニペットは次のようになります。

<system.diagnostics>
  <switches>
   <add name="CPS" value="Verbose" />
  </switches>
</system.diagnostics>

4
> DbgViewを開き、デバッグ出力をキャプチャしていることを確認します。キャプチャが開始されたことを確認するにはどうすればよいですか?再構築プロジェクトでも同じ問題があります。しかし、DebugViewには情報がありません。DebugViewの「Capture」メニューの最初の5つのオプションを有効にしました。(そして、答えの良いリンクをありがとう!)
sergtk

3
これは、それを理解するのに役立ちました。ただし、最後の.H参照がなくなる前に、中間ビルドディレクトリも削除する必要がありました。おそらくStdAfx.objを更新するためでしょうか。とにかく、すべての中間ビルドフォルダーを削除し、プロジェクトファイルをクリーンアップした後も、問題ありません。
AHelps

2
ありがとう-なぜ通常の出力ウィンドウに表示されないのですか?
Martin Beckett、

4
VS2012を使用している場合は、構成ファイルに貼り付ける少し異なるスニペットがあります。これは元の記事からリンクされていますが、念のため
VS2012を

3
ちなみに、これはVS2013ではもう機能しないようです-構成ファイルを編集した後、DebugViewに関連するものは何も生成されません。
ネイサンリード

166

Visual Studio 2012では、承認されたソリューションよりも簡単に同じ結果を得ることができました。

メニューツールオプションプロジェクトとソリューションビルドと実行 →* MSBuildプロジェクトビルド出力の冗長性のオプション最小から診断に変更しました

次に、ビルド出力で「not up to date」を検索して同じ行を見つけました。

プロジェクト「blabla」は最新ではありません。プロジェクト項目「c:\ foo \ bar.xml」の「出力ディレクトリにコピー」属性が「常にコピー」に設定されています。


6
これはVS2013でも機能し、設定ファイルの調整は機能しなくなったようです。
ネイサンリード

1
これは私にとって非常にうまくいきました。循環参照(project1-> project2、project2-> project1.dll)があり、ほとんどのソリューションが毎回ビルドされることがわかりました。使用されていませんでした。
Kobi

7
C#では、「最新ではない」というものは何も見つかりませんでした。魔法の単語は「より新しい」ようです
Pete

3
1>Project not up to date because build input 'C:\...\ReadMe.txt' is missing.:O !!?!
jozxyqk 2014年

3
VS2013ではwas modified atnot up to date出力がなかったため、診断モードで検索する必要がある場合もあります。
jaba 2016年

59

これは今日私に起こりました。原因を突き止めることができました。プロジェクトには、ディスク上に存在しなくなったヘッダーファイルが含まれていました。

プロジェクトからファイルを削除することで問題は解決しました。


2
いいえ、ディスク上に存在しないヘッダーファイルはありません。しかし、どうして原因を突き止めることができたのですか?不足しているファイルがあることをどのようにして知りましたか?おそらく、あなたと同じように確認することで、私の問題についてもっと何かを見つけることができます。
クリスU

1
これが私に起こったとき、別の解決策がありました。おそらくかなりあいまいですが、あるコンピュータから別のコンピュータでプロジェクトをコンパイルしていたときに、あるコンピュータでAMに、別のコンピュータでPMに誤って時間を設定してしまったことがわかりました。大幅な時間差により、コンピューターの1つが常にすべてをコンパイルするか、ソースファイルを変更した場合でも何もコンパイルしなくなりました。
カイル

1
ヘッダーファイルが存在するにもかかわらず、これは私にとってはうまくいきました。ロギングを有効にするために以下の回答を使用して、ヘッダーファイルが欠落していると判断しました。依存関係を削除して追加し直したところ、最小限の再構築が再び機能しました。
Ed Bayiates、

クロックスキューにより、ほとんどのビルドシステムが爆破します
14

15

私たちはこの問題にも遭遇し、それを解決する方法を見つけました。

問題は、「ファイルがディスク上に存在しなくなった」という前述のとおりでした。

これは正しくありません。ファイルはディスク上に存在しますが、.VCPROJファイルは別の場所でファイルを参照しています。

これを「検出」するには、「インクルードファイルビュー」に移動し、Visual Studioで検出できないファイルが見つかるまで各インクルードファイルを順番にクリックします。次に、そのファイルを(既存のアイテムとして)追加し、見つからない参照を削除します。すべて正常です。

有効な質問は次のとおりです。インクルードファイルの場所がわからない場合、Visual Studioを構築するにはどうすればよいでしょうか。

.vcprojファイルには、問題のあるファイルへの相対パスがVisual Studio GUIに表示されていない場所にあると考えられます。これにより、インクルードのツリービューが正しくないにもかかわらず、プロジェクトが実際にビルドされる理由が説明されます。


4
VCがビルドできる理由は、それらがヘッダーファイルであるためです。ヘッダーファイルは実際にはコンパイルされません。ヘッダーファイルのいずれかが実際に.C / .CPPファイルによって使用されている場合、ビルドは失敗します。したがって、依存関係チェッカー(ヘッダーファイルを探す)はプロジェクトに再ビルドが必要であるとマークしますが、実際のコンパイラー(ヘッダーファイルのリストを無視するだけ)は成功します。
AHelps 11/10

4
信じられないことに...これは、.vcxprojファイルにテキストファイルへの古い参照がある場合にも発生します(存在していても、ビルドの一部ではありません!!)。ウィザードを使用してプロジェクトを生成しましたが、ディスクから削除したReadMe.txtファイルが含まれていましたが、vcxprojから削除するのを忘れていました。
DLRdave 2013

開くことができないファイルを見つけることができません(1つを除いて、それはハードドライブ上にあります。そのようなファイルは、Visual Studio 2010 Express SKUで開くことができないなどのようなものです。
匿名ペンギン

2
「インクルードファイルビュー」とは何ですか?
ベン

1
インクルードファイルビューは、おそらくソリューションエクスプローラーのインクルードファイルセクションです。
Jaywalker 2014年

12

受け入れられた答えは、私が作業を開始しなければならなかった、めちゃくちゃになったプロジェクトのこの問題を解決する方法を理解するための正しい道に私を助けました。ただし、非常に多くの不良インクルードヘッダーを処理する必要がありました。詳細なデバッグ出力では、デバッグ出力を出力しているときに1つを削除するとIDEが30秒間フリーズし、プロセスが非常に遅くなりました。

私はイライラして、(Visual Studio 2010)プロジェクトファイルをチェックして、不足しているすべてのファイルを、それらが配置されているフィルターと共に一度に出力するための迅速で汚いPythonスクリプトを記述しました。ここに要旨:https : //gist.github.com/antiuniverse/3825678(または相対パスをサポートするこのフォーク

例:

D:\...> check_inc.py sdk/src/game/client/swarm_sdk_client.vcxproj
[Header Files]:
  fx_cs_blood.h   (cstrike\fx_cs_blood.h)
  hud_radar.h   (cstrike\hud_radar.h)
[Game Shared Header Files]:
  basecsgrenade_projectile.h   (..\shared\cstrike\basecsgrenade_projectile.h)
  fx_cs_shared.h   (..\shared\cstrike\fx_cs_shared.h)
  weapon_flashbang.h   (..\shared\cstrike\weapon_flashbang.h)
  weapon_hegrenade.h   (..\shared\cstrike\weapon_hegrenade.h)
  weapon_ifmsteadycam.h   (..\shared\weapon_ifmsteadycam.h)
[Source Files\Swarm\GameUI - Embedded\Base GameUI\Headers]:
  basepaenl.h   (swarm\gameui\basepaenl.h)
  ...

ソースコード:

#!/c/Python32/python.exe
import sys
import os
import os.path
import xml.etree.ElementTree as ET

ns = '{http://schemas.microsoft.com/developer/msbuild/2003}'

#Works with relative path also
projectFileName = sys.argv[1]

if not os.path.isabs(projectFileName):
   projectFileName = os.path.join(os.getcwd(), projectFileName)

filterTree = ET.parse(projectFileName+".filters")
filterRoot = filterTree.getroot()
filterDict = dict()
missingDict = dict()

for inc in filterRoot.iter(ns+'ClInclude'):
    incFileRel = inc.get('Include')
    incFilter = inc.find(ns+'Filter')
    if incFileRel != None and incFilter != None:
        filterDict[incFileRel] = incFilter.text
        if incFilter.text not in missingDict:
            missingDict[incFilter.text] = []

projTree = ET.parse(projectFileName)
projRoot = projTree.getroot()

for inc in projRoot.iter(ns+'ClInclude'):
    incFileRel = inc.get('Include')
    if incFileRel != None:
        incFile = os.path.abspath(os.path.join(os.path.dirname(projectFileName), incFileRel))
        if not os.path.exists(incFile):
            missingDict[filterDict[incFileRel]].append(incFileRel)

for (missingGroup, missingList) in missingDict.items():
    if len(missingList) > 0:
        print("["+missingGroup+"]:")
        for missing in missingList:
            print("  " + os.path.basename(missing) + "   (" + missing + ")")

相対パスをサポートするようにコードを変更しました。お気軽に要旨を更新し、私のフォークへのリンクを削除してください!
ixe013 2014年

これは私にとってはうまくいきました!なんと時間節約!ありがとう!何が問題であるかを通知する診断出力には何もありませんでしたが、ユーティリティによって示されました!
Ed Bayiates 2016年

列挙型Aディレクトリへの別のフォークと各見つかっvcxprojの上でそれを呼び出すgist.github.com/paulsapps/4992d2d460f4ef44538d62c9e875ca78
paulm

8

ソリューション(およびディスク)からcppといくつかのヘッダーファイルを削除しましたが、まだ問題がありました。

コンパイラが使用するすべてのファイルは、一時ディレクトリの* .tlogファイルにあります。ファイルを削除しても、この* .tlogファイルは更新されません。これは、プロジェクトが最新かどうかを確認するためにインクリメンタルビルドで使用されるファイルです。

この.tlogファイルを手動で編集するか、プロジェクトをクリーンアップして再ビルドします。


これで終わりです!不足しているインクルードファイルを修正してから何時間も費やしましたが、STILLは古くなっており、ロギングにより、不足しているものの決定的な手がかりが示されました。それらのTLOGファイルを取り除く必要がありました!ありがとう!
Ed Bayiates 2013年

6

同様の問題がありましたが、私の場合、欠落しているファイルはなく、pdb出力ファイルの定義方法にエラーがありました。サフィックス.pdbを忘れてしまいました(デバッグロギングトリックで見つけました)。

私が変更した問題を解決するために、vxprojファイルで、次の行:

<ProgramDataBaseFileName>MyName</ProgramDataBaseFileName>

<ProgramDataBaseFileName>MyName.pdb</ProgramDataBaseFileName>

6

私はVS2013(Update 5)でこの問題を抱えていましたが、その理由は2つあります。どちらも、「ツール」->「プロジェクトとソリューション」->「ビルドと実行」で「詳細」ビルド出力を有効にすることで確認できます。 。

  1. "Forcing recompile of all source files due to missing PDB "..."
    これは、コンパイラオプションでデバッグ情報出力を無効にすると発生します(プロジェクト設定::C / C ++“->“ Debug Information Format“を„ None“に、„ Linker“->“ Generate Debug Info“を„ No“:) 。「C / C ++」->「プログラムデータベースファイル名」をデフォルト(「$(IntDir)vc $(PlatformToolsetVersion).pdb」)のままにした場合、VSはバグ(https ://connect.microsoft.com/VisualStudio/feedback/details/833494/project-with-debug-information-disabled-always-rebuilds)。
    修正するには、ファイル名を ""(空のフィールド)にクリアするだけです。

  2. "Forcing rebuild of all source files due to a change in the command line since the last build."
    これもVSの既知のバグのようです(https://connect.microsoft.com/VisualStudio/feedback/details/833943/forcing-rebuild-of-all-source-files-due-to-a-change-in- the-command-line-since-the-last-build)、新しいバージョンでは修正されているようです(VS2013は除く)。私は回避策がないことを知っていましたが、もしそうなら、ぜひここに投稿してください。


1
これはなぜ私の問題です。「最新ではない」メッセージはどれも私のものではなく、これを追跡するのに永遠にかかりました。また、それを削除するか、$(IntDir)$(ProjectName).pdbに設定するとうまくいきました(デバッグ構成とリリース構成の両方で必ず変更してください)
John Grabanski

4

他の誰かが同じ問題を抱えているかどうかはわかりませんが、プロジェクトのプロパティが"Configuration Properties" -> C/C++ -> "Debug Information Format"「なし」に設定されていて、デフォルトの「プログラムデータベース(/ Zi)」に戻すと、プロジェクトが毎回再コンパイルされなくなりました。


1
+1これは、Visual Studio 2013でも同様に機能します。具体的には、[ なし]に戻すと、再び正常に機能します。
user541686 2015

4

Visual Studioフォーラムによって参照される別の簡単なソリューション

構成の変更:メニューツールオプションプロジェクトとソリューションVC ++プロジェクト設定すべてのファイル表示するソリューションエクスプローラーモード

その後、ソリューションエクスプローラーですべてのファイルを確認できます。

黄色のアイコンでマークされたファイルを見つけて、プロジェクトから削除します。

大丈夫です。


4

Visual Studio 2013-「PDBがないためにすべてのソースファイルを強制的に再コンパイルする」。問題を特定するために詳細なビルド出力をオンにしました。[ツール]→[プロジェクトとソリューション]→[ビルドと実行]で[詳細]ビルド出力を有効にしました。

複数のプロジェクトがあり、すべてC ++で、プロジェクト設定(C / C ++→デバッグ情報フォ​​ーマット)のオプションを問題のあるプロジェクトのプログラムデータベース(/ Zi)に設定しました。しかし、これはそのプロジェクトの問題を止めませんでした。問題は、ソリューション内の他のC ++プロジェクトの1つに起因しています。

すべて設定しました「プログラムデータベース(/ Zi)」にC ++のプロジェクトを。これで問題が解決しました。

この場合も、問題を報告しているプロジェクトは問題のあるプロジェクトではありませんでした。すべてのプロジェクトを「プログラムデータベース(/ Zi)」に設定して、問題を修正してください。


VS2015は、詳細なビルド出力の設定に関して同じです
LOAS

3

今日この問題に出会いましたが、少し違いました。私のソリューションにはCUDA DLLプロジェクトがありました。クリーンソリューションでのコンパイルは問題ありませんでしたが、それ以外の場合は失敗し、コンパイラーは常にCUDA DLLプロジェクトを最新でないものとして扱いました。

私はこの投稿からの解決策を試しました。

しかし、私のソリューションには欠落しているヘッダーファイルはありません。それから私は私の場合の理由を見つけました。

以前はプロジェクトの中間ディレクトリを変更しましたが、問題は発生しませんでした。そして、CUDA DLLプロジェクトの中間ディレクトリを$(Configuration)\に戻したところ、すべてが再び正常に機能しました。

CUDAビルドのカスタマイズとデフォルト以外の中間ディレクトリの間にいくつかの小さな問題があると思います。


VS2013(C#)を使用して、IntermediateOutputPathの設定を試しました。これがソリューションとは別のドライブ上のフォルダーを指している場合、増分ビルドは機能を停止します-MSBuildは、いくつかのソースファイルがいくつかの中間ファイル(通常はPDB)で常に古くなっていると不平を言います。私のブログ投稿を参照しください。
Robert Schmidt

3

私は同様の問題を抱えており、上記の指示(受け入れられた回答)に従って不足しているファイルを特定しましたが、頭を掻くことはありませんでした。これが私がしたことの私の要約です。正確には、これらはプロジェクトでビルドする必要がないため(少なくとも私の場合)、欠落しているファイルではありませんが、実際には必要ではない、ディスク上に存在しないファイルへの参照です。

これが私の話です:

  1. Windows 7では、ファイルはにあります%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\%。そこ2つの同様のファイルがあるdevenv.exe.config.configdevenv.exe.config。後で変更したい。

  2. Windows 7では、プログラムファイルにあるこのファイルを編集する権限がありません。別の場所(デスクトップ)にコピーして変更し、プログラムファイルの場所にコピーします。

  3. DebugViewをIDEに接続して、不足しているファイルを確認する方法を見つけようとしていました。まあ、あなたは何もする必要はありません。実行するだけで、すべてのメッセージがキャプチャされます。Capture EventsメニューオプションがCaptureデフォルトで選択されているはずのメニューで選択されていることを確認します。

  4. DebugViewは、不足しているすべてのファイルを一度に表示しません(少なくとも私には表示されませんでした)。DebugViewを実行し、Visual Studio 2010でプロジェクトを実行します。project out of dateメッセージが表示され、[ はい]を選択してビルドすると、DebugViewは、存在しないか再構築の原因となっている最初のファイルを表示します。プロジェクトファイル(ソリューションファイルではない)をメモ帳で開き、そのファイルを検索して削除します。この削除を行っている間は、プロジェクトを閉じて再度開くことをお勧めします。不足しているファイルがDebugViewに表示されなくなるまで、このプロセスを繰り返します。

  5. DebugViewツールバーボタンまたは[ 編集] →[ フィルター/ハイライト ]オプションから、メッセージフィルターを最新でないように設定すると便利です。そうすることで、表示されるメッセージは、「最新ではない」文字列が含まれているメッセージだけになります。

不要な参照である多くのファイルがあり、それらをすべて削除すると、上記の手順に従って問題が修正されました。

不足しているすべてのファイルを一度に見つける2番目の方法

これらのファイルを一度に見つけるには2つ目の方法がありますが、これには(a)ソース管理と(b)Visual Studio 2010との統合が含まれます。VisualStudio 2010 を使用して、プロジェクトをソース内の目的の場所またはダミーの場所に追加しますコントロール。ディスクには存在しないがプロジェクトファイルで参照されているファイルを含め、すべてのファイルを追加しようとします。Perforceなどのソース管理ソフトウェアに移動すると、ディスク上に存在しないこれらのファイルに別の配色でマークが付けられます。PERFORCEは、黒い鍵でそれらを示しています。これらは欠落している参照です。これで、それらすべてのリストができました。メモ帳を使用してプロジェクトファイルからすべて削除でき、プロジェクトが古くなっていることについて文句を言うことはありません。


2

私にとっては、プロジェクト内の「Header Files」に存在しないヘッダーファイルが存在していた。このエントリを削除した後(右クリック>プロジェクトから除外)は最初に再コンパイルし、次に直接

==========ビルド:成功0、失敗0、最新5、スキップ0 ==========

変更せずに再構築する試みは行われませんでした。「AlwaysCreate」フラグをトリガーするVS2010によって実装されたビルド前のチェック(ドキュメント化されているかどうかは不明)だと思います。


2

コマンドラインMSBuildコマンド(Visual Studio IDEではない)を使用している場合、たとえばAppVeyorをターゲットにしている場合、またはコマンドラインを使用したい場合は、このオプションをMSBuildコマンドラインに追加できます。

/fileLoggerParameters:LogFile=MyLog.log;Append;Verbosity=diagnostic;Encoding=UTF-8

ここに記載されているとおり(警告:通常のMSDNの冗長性)。ビルドが終了したら、ビルドwill be compiled中に作成されたログファイルで文字列を検索しますMyLog.log


1
/ verbosity:detailedも同じ情報を提供しますが、詳細ではありません。次に、「としてコンパイルされます」を検索できます。
シェーンギャノン、2016

1
「ソースのコンパイルが必要です」も検索してください。これにより、リンクも見つかります
Shane Gannon '19

2

Visual Studio 2013 ProfessionalとUpdate 4を使用していますが、他の提案で解決策が見つかりませんでしたが、チームプロジェクトの問題を解決することができました。

これが問題を引き起こすために私がしたことです-

  • 新しいクラスオブジェクトを作成しました(プロジェクト->クラスの追加)
  • ソリューションエクスプローラーでファイルの名前を変更し、すべての参照の名前を自動的に変更して一致させるかどうかを尋ねられたら、[はい]をクリックしました

これが問題を解決するために私がしたことです-

  • チームエクスプローラーのホームに移動
  • ソース管理エクスプローラをクリックします
  • すべてのクラス/プロジェクトファイルがあるフォルダーにドリル
  • リストで元のファイル名を見つけ、右クリックして削除しました
  • ビルド

これが当てはまる場合は、プロジェクトに残したい実際のファイルではなく、ファントムファイルを削除していることを確認してください。


1

私はこの問題を抱えており、これを発見しました:

http://curlybrace.blogspot.com/2005/11/visual-c-project-continually-out-of.html

Visual C ++プロジェクトが絶えず古くなっている(winwlm.h macwin32.h rpcerr.h macname1.h欠落)

問題:

Visual C ++ .Net 2003では、前回のビルドで何も変更されておらずエラーも報告されていなかったにもかかわらず、私のプロジェクトの1つが常に古くなっていると主張していました。

対応するプロジェクトのBuildLog.htmファイルを開くと、これらのファイルのPRJ0041エラーのリストが表示されましたが、私のシステムにはどこにも表示されませんでした。winwlm.hmacwin32.h rpcerr.h macname1.h

各エラーは次のようになります。

  MyApplication : warning PRJ0041 : Cannot find missing dependency 'macwin32.h' for file 'MyApplication.rc'.  

プロジェクトは引き続きビルドされる可能性がありますが、このファイルが見つかるまで古くなって表示される可能性があります。

解決:

プロジェクトの.rcファイルのafxres.h代わりにインクルードしresource.hます。

プロジェクトの.rcファイルには「#include resource.h」が含まれていました。リソースコンパイラはプリプロセッサ#ifdefブロックを受け入れないため、無視する必要のあるインクルードファイルを探し出そうとします。Windows.hには、そのようなブロックが多数含まれています。代わりにafxres.hを含めると、PRJ0041の警告が修正され、「プロジェクトが最新ではありません」というエラーダイアログが表示されなくなりました。


1

私の場合、プロジェクトの1つに複数のIDLファイルが含まれています。MIDLコンパイラは、IDLファイル名に関係なく、それぞれに対して「dlldata.c」と呼ばれるDLLデータファイルを生成します。これにより、Visual Studioは、IDLファイルを変更しなくても、ビルドごとにIDLファイルをコンパイルしました。

回避策は、IDLファイルごとに一意の出力ファイルを構成することです(/ dlldataスイッチが省略されている場合でも、MIDLコンパイラは常にこのようなファイルを生成します)。

  • IDLファイルを右クリックします。
  • プロパティの選択-MIDL-出力
  • DllDataファイルプロパティの一意のファイル名を入力してください

1

私はこれに私の髪を引き裂くのに何時間も費やしました。ビルド出力は一貫していませんでした。1つのビルドから次の連続するビルドまでのさまざまな理由により、さまざまなプロジェクトが「最新ではありません」。私は最終的に犯人がDropBox(3.0.4)であることがわかりました。... \ DropBoxから私のソースフォルダーを私のプロジェクトフォルダーに接続します(これが理由かどうかはわかりません)が、DropBox はビルド中にファイル何らかの影響を与えます。同期を一時停止し、すべてが常に最新の状態です。


1

かなりの数の潜在的な理由があり、前述のように、まずMSBuildの詳細度を「Diagnostic」に設定してそれらを診断する必要があります。ほとんどの場合、上記の理由は自明であり、すぐに対応できるはずですが、MSBuildは、一部のファイルが変更されており、コピーが必要であると誤って主張することがあります。

その場合は、NTFSトンネリングを無効にするか、出力フォルダーを新しい場所に複製する必要があります。 ここにそれはより多くの言葉である。


1

これは何度も私に起こり、その後理由を理解する前に消えました。私の場合、それは:

デュアルブートセットアップのシステム時刻が間違っています!

結局のところ、Ubuntuとのデュアルブートが根本的な原因でした。私は、Ubuntuを修正してハードウェアクロックをいじるのをやめるのが面倒です。Ubuntuにログインすると、時間が5時間進みます。

運が悪かったので、私はプロジェクトを1回ビルドしましたが、間違ったシステム時刻を使用して、時刻を修正しました。その結果、すべてのビルドファイルのタイムスタンプが間違っていたため、VSはそれらのファイルがすべて古くなっていると判断し、プロジェクトを再ビルドします。


1

ほとんどのビルドシステムは、データタイムスタンプを使用して、再ビルドがいつ行われるかを決定します。出力ファイルの日付/タイムスタンプは、依存関係の最終変更時刻と照合されます。依存関係のいずれかが新しい場合、ターゲットが再構築されます。

ビルド出力のタイムスタンプが将来作成されると思われるファイルのタイムスタンプを超えることが困難であるため、依存関係のいずれかが何らかの理由で無効なデータタイムスタンプを取得すると、これにより問題が発生する可能性があります。


VS2010が再構築を強制したり、プロジェクトが最新であると考える理由を取得することは可能ですか?
クリスU

VS6またはおそらくVS2005では、プロジェクトの各ファイルの依存関係と出力を表示するタブのあるプロジェクトを右クリックしたときに表示される奇妙な小さなプロパティダイアログがありました。VS2008(またはVS2010)で同等のレポートを取得する方法がわかりません
Chris Becke

1

私にとっては、一部のファイルの「ビルドアクション」プロパティが「リソース」に設定され、「出力ディレクトリにコピー」が「新しい場合はコピー」に設定されているWPFプロジェクトで問題が発生しました。解決策は、「出力ディレクトリにコピー」プロパティを「コピーしない」に変更することでした。

msbuildは「リソース」ファイルを出力にコピーしないことを認識していますが、そこにない場合でもビルドをトリガーします。多分それはバグと考えることができますか?

msbuildがすべてをビルドし続ける理由について豆をこぼす方法をほのめかすここでの回答は非常に役立ちます!


0

プロジェクトのデバッグコマンド引数を変更すると、プロジェクトを再構築する必要があるというメッセージもトリガーされます。ターゲット自体はデバッグ引数の影響を受けませんが、プロジェクトのプロパティは変更されています。ただし、再構築すると、メッセージは消えます。


0

Visual Studio 2005でも同様の問題があり、私のソリューションは次の依存関係にある5つのプロジェクトで構成されていました(最初に最初に作成)。

Video_Codec depends on nothing
Generic_Graphics depends on Video_Codec
SpecificAPI_Graphics depends on Generic_Graphics
Engine depends on Specific_Graphics
Application depends on Engine.

Video_Codecプロジェクトでは、ソリューションを完全にクリーンにしてから再ビルドした後でも、完全なビルドが必要であることがわかりました。

pdbC / C ++とリンカーの両方の出力ファイルが他の作業プロジェクトで使用される場所と一致するようにして、これを修正しました。RTTIもオンに切り替えました。


0

Visual Studio 2015 SP3の別の問題ですが、数年前のVisual Studio 2013でも同様の問題が発生しました。

私の問題は、どういうわけかプリコンパイル済みヘッダーに誤ったcppファイルが使用されていたということでした(そのため、プリコンパイル済みヘッダーを作成する2つのcppファイルがありました)。ここで、Visual Studioが間違ったcppのフラグを変更して、リクエストなしで「プリコンパイル済みヘッダーを作成する」ようにしたのですが、手がかりがありません。

とにかく、間違ったcppファイルには、ビルドごとに変更されるversion.hファイルが含まれています。したがって、Visual Studioはすべてのヘッダーを再構築します。そのため、プロジェクト全体が再構築されます。

さて、これで通常の動作に戻りました。


0

私は常にすべてのファイルをコンパイルするVC ++プロジェクトを持っていて、以前にVS2005からVS2010に(他の人によって)アップグレードされていました。StdAfx.cppを除くプロジェクト内のすべてのcppファイルが、プリコンパイル済みヘッダーの作成(/ Yc)に設定されていることがわかりました。StdAfx.cppだけがプリコンパイル済みヘッダーを作成するように設定され、残りはプリコンパイル済みヘッダーを使用(/ Yu)に設定するようにこれを変更し、これで問題が解決しました。


0

私はVisual Studio 2013を使用していて、Windows 10 May 2019アップデートにアップデートしたばかりで、変更に関係なく、毎回突然コンパイルをやり直す必要がありました。pchの名前をTargetNameではなくProjectNameに変更してみて、詳細なログとそのPythonスクリプトで欠落しているファイルを探しましたが、結局、私の時間は(ミリ秒単位で)MSのサーバーと同期されていませんでした。

私にとってこれを解決したのは

  • コントロールパネルの「日付と時刻の調整」
  • 「今すぐ同期」

現在、私のプロジェクトは理由もなく再コンパイルする必要はありません。


0

改行や空白を入れたと思います。それを削除して、もう一度F5キーを押します。


-3

.NETプロジェクトは、関係なく常に再コンパイルされます。これの一部は、IDEを最新の状態に保つことです(IntelliSenseなど)。私は何年も前にマイクロソフトフォーラムでこの質問をしたことを覚えており、これが私に与えられた答えでした。


1
VS2008では、プロジェクトは毎回再構築されませんでした。dllは非常に低階層であり、ほとんどすべてのdllを強制的に再構築するため、これは非常に煩わしいです。移行中に問題が発生したため、何が原因なのかわかりません。
Chris U

2
2008年、2010年、2012年と2013年には再構築.NETプロジェクトを毎回行わない
paulm

インテリセンスを機能させるために、バックグラウンドでコンパイルが行われています(この回答は10年前のものです)。I
Preet Sangha
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.