Visual Studio 2010 hält das Projekt immer für veraltet, aber nichts hat sich geändert

194

Ich habe ein sehr ähnliches Problem wie beschrieben hier .

Ich habe auch eine gemischte Lösung von C ++ / CLI- und C # -Projekten von Visual Studio 2008 auf Visual Studio 2010 aktualisiert. In Visual Studio 2010 ist ein C ++ / CLI-Projekt immer veraltet.

Auch wenn es kurz vor und kompiliert und verlinkt wurde F5 getroffen wird, erscheint die Meldung "Das Projekt ist veraltet. Möchten Sie es erstellen?" erscheint. Dies ist sehr ärgerlich, da die DLL-Datei sehr niedrig ist und fast alle Projekte der Lösung zur Neuerstellung zwingt.

Meine PDF-Einstellungen sind auf den Standardwert eingestellt ( Lösungsvorschlag für dieses Problem ).

Ist es möglich, den Grund dafür zu ermitteln, warum Visual Studio 2010 eine Neuerstellung erzwingt oder ein Projekt für aktuell hält?

Irgendwelche anderen Ideen, warum sich Visual Studio 2010 so verhält?

Chris U.
quelle

Antworten:

224

Nur für Visual Studio / Express 2010. Weitere (einfachere) Antworten für VS2012, VS2013 usw.

Um die fehlenden Dateien zu finden , verwenden Sie die Informationen aus dem Artikel Aktivieren der C ++ - Projektsystemprotokollierung , um die Debugprotokollierung in Visual Studio zu aktivieren, und lassen Sie sich nur sagen, was die Neuerstellung verursacht:

  1. Öffnen Sie die devenv.exe.configDatei (gefunden in %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\oder in %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\). Bei Express-Versionen wird die Konfigurationsdatei benannt V*Express.exe.config.
  2. Fügen Sie nach der </configSections>Zeile Folgendes hinzu:

    <system.diagnostics>
      <switches>
        <add name="CPS" value="4" />
      </switches>
    </system.diagnostics>
    
  3. Starten Sie Visual Studio neu
  4. Öffnen Sie DbgView und stellen Sie sicher, dass die Debug-Ausgabe erfasst wird
  5. Versuchen Sie zu debuggen (drücken Sie F5 in Visual Studio)
  6. Durchsuchen Sie das Debug-Protokoll nach Zeilen des Formulars:

    devenv.exe Information: 0: Das Projekt 'Bla \ Bla \ Dummy.vcxproj' ist nicht aktuell, da die Build-Eingabe 'Bla \ Bla \ SomeFile.h' fehlt.

    (Ich habe gerade Strg + F gedrückt und gesucht not up to date) Dies sind die Referenzen, die dazu führen, dass das Projekt ständig "veraltet" ist.

Um dies zu korrigieren, entfernen Sie entweder alle Verweise auf die fehlenden Dateien aus Ihrem Projekt oder aktualisieren Sie die Verweise, um deren tatsächlichen Speicherort anzugeben.

Hinweis: Wenn Sie 2012 oder höher verwenden, sollte das Snippet wie folgt lauten:

<system.diagnostics>
  <switches>
   <add name="CPS" value="Verbose" />
  </switches>
</system.diagnostics>
Mosc
quelle
4
> Öffnen Sie DbgView und stellen Sie sicher, dass die Debug-Ausgabe erfasst wird. Wie stelle ich sicher, dass die Erfassung gestartet wird? Ich habe das gleiche Problem mit Wiederherstellungsprojekten. In DebugView gibt es jedoch keine Informationen. Ich habe die ersten 5 Optionen im Menü 'Capture' von DebugView aktiviert. (Und danke für gute Links als Antwort!)
Sergtk
3
Dies half uns, es herauszufinden; Wir mussten jedoch auch unser Zwischen-Build-Verzeichnis löschen, bevor die letzten .H-Referenzen verschwunden waren - wahrscheinlich, um die Datei StdAfx.obj zu aktualisieren? Nachdem wir alle Zwischen-Build-Ordner gelöscht und die Projektdateien bereinigt haben, können wir loslegen.
AHelps
2
Vielen Dank - warum ist das nicht im regulären Ausgabefenster?
Martin Beckett
4
Wenn Sie VS2012 verwenden, müssen Sie ein etwas anderes Snippet in die Konfigurationsdatei einfügen. Dies ist aus dem Originalartikel verlinkt, aber nur für den Fall: Aktivieren Sie die C ++ - und Javascript-Projektsystemverfolgung VS2012
rmaVT
3
Zu Ihrer Information, dies scheint in VS2013 nicht mehr zu funktionieren - nach dem Bearbeiten der Konfigurationsdatei wird in DebugView nichts Interessantes generiert.
Nathan Reed
166

In Visual Studio 2012 konnte ich das gleiche Ergebnis einfacher erzielen als in der akzeptierten Lösung.

Ich habe die Option im Menü ExtrasOptionenProjekte und LösungenErstellen und Ausführen → * Ausführlichkeit der Ausgabe des MSBuild-Projekts "von" Minimal " in" Diagnose " geändert .

Dann fand ich in der Build-Ausgabe die gleichen Zeilen, indem ich nach "nicht aktuell" suchte:

Das Projekt 'blabla' ist nicht aktuell. Für das Projektelement 'c: \ foo \ bar.xml' wurde das Attribut 'In Ausgabeverzeichnis kopieren' auf 'Immer kopieren' gesetzt.

Stanislav
quelle
6
Dies funktioniert auch in VS2013, wo die Optimierung der Konfigurationsdatei nicht mehr zu funktionieren scheint.
Nathan Reed
1
Das hat bei mir sehr gut funktioniert. Es stellte sich heraus, dass ich einen Zirkelverweis hatte (Projekt1 -> Projekt2, Projekt2 -> Projekt1.dll), der dazu führte, dass der größte Teil der Lösung jedes Mal erstellt wurde. Es wurde nicht einmal benutzt.
Kobi
7
Mit C # konnte ich nichts mit "nicht aktuell" finden, das Zauberwort scheint "ist neuer als" zu sein
Pete
3
1>Project not up to date because build input 'C:\...\ReadMe.txt' is missing.:Ö !!?!
jozxyqk
3
In VS2013 müssen Sie möglicherweise auch was modified atim Diagnosemodus suchen, da ich keine not up to dateAusgänge hatte.
Jaba
59

Das ist mir heute passiert. Ich konnte die Ursache ausfindig machen: Das Projekt enthielt eine Header-Datei, die nicht mehr auf der Festplatte vorhanden war.

Das Entfernen der Datei aus dem Projekt löste das Problem.

Dave
quelle
2
Nein, ich habe keine Header-Dateien, die nicht auf der Festplatte vorhanden sind. Aber wie konnten Sie die Ursache aufspüren? Wie haben Sie herausgefunden, dass eine Datei fehlt? Vielleicht kann ich etwas mehr über mein Problem herausfinden, indem ich auf die gleiche Weise wie Sie nachschaue.
Chris U
1
Es gab eine andere Lösung, als mir das passierte. Wahrscheinlich ziemlich dunkel, aber ich habe das Projekt von einem Computer zum anderen kompiliert und festgestellt, dass ich versehentlich die Zeit auf einem Computer auf AM und auf dem anderen auf PM eingestellt habe. Der drastische Zeitunterschied führte dazu, dass einer der Computer entweder immer alles kompilierte oder nie etwas kompilierte, selbst wenn ich Quelldateien änderte.
Kyle
1
Dies funktionierte bei mir trotz der vorhandenen Header-Datei. Bei Verwendung der folgenden Antwort zum Aktivieren der Protokollierung wurde angenommen, dass eine Header-Datei fehlt. Ich habe die Abhängigkeit entfernt, sie wieder hinzugefügt und die minimale Neuerstellung hat wieder funktioniert!
Ed Bayiates
Ein
Zeitversatz
15

Wir sind auch auf dieses Problem gestoßen und haben herausgefunden, wie es behoben werden kann.

Das Problem war wie oben angegeben: "Die Datei ist nicht mehr auf der Festplatte vorhanden."

Das ist nicht ganz richtig. Die Datei ist auf der Festplatte vorhanden, aber die VCPROJ-Datei verweist auf die Datei an einer anderen Stelle.

Sie können dies "entdecken", indem Sie in der Ansicht "Include-Datei" nacheinander auf jede Include-Datei klicken, bis Sie diejenige finden, die Visual Studio nicht finden kann. Anschließend fügen Sie diese Datei (als vorhandenes Element) hinzu und löschen die Referenz, die nicht gefunden werden kann, und alles ist in Ordnung.

Eine gültige Frage lautet: Wie kann Visual Studio überhaupt erstellen, wenn es nicht weiß, wo sich die Include-Dateien befinden?

Wir glauben, dass die .vcproj-Datei einen relativen Pfad zu der fehlerhaften Datei hat, der nicht in der Visual Studio-GUI angezeigt wird, und dies erklärt, warum das Projekt tatsächlich erstellt wird, obwohl die Baumansicht der Includes falsch ist.

Zach
quelle
4
Der Grund, warum VC erstellen kann, liegt darin, dass es sich um Header-Dateien handelt - und Header-Dateien nicht kompiliert werden. Wenn eine der Header-Dateien tatsächlich von einer .C / .CPP-Datei verwendet wird, schlägt der Build nur dann fehl. Der Abhängigkeitsprüfer (der nach der Header-Datei sucht) markiert das Projekt als neu erstellbar, aber der eigentliche Compiler (der die Liste der Header-Dateien einfach ignoriert) kann erfolgreich sein.
AHelps
4
Unglaublich ... dies passiert auch, wenn Sie einen veralteten Verweis auf eine Textdatei (die ohnehin NICHT Teil des Builds ist, selbst wenn sie existiert !!) in Ihrer .vcxproj-Datei haben. Ich hatte mit dem Assistenten ein Projekt erstellt, das eine ReadMe.txt-Datei enthielt, die ich von der Festplatte löschte, aber vergaß, sie aus dem vcxproj zu entfernen.
DLRdave
Ich kann keine Datei finden, die ich nicht öffnen kann (außer einer, aber die befindet sich auf der Festplatte. Es heißt, dass so etwas auf der Visual Studio 2010 Express-SKU oder so nicht geöffnet werden kann.
Anonymer Pinguin
2
Was ist die "Include-Dateiansicht" und wie gelangen Sie dorthin?
Ben
1
Die Ansicht "Datei einschließen" ist möglicherweise der Abschnitt "Dateien einschließen" im Projektmappen-Explorer.
Jaywalker
12

Die akzeptierte Antwort half mir auf dem richtigen Weg, um herauszufinden, wie ich dieses Problem für das vermasselte Projekt lösen konnte, mit dem ich anfangen musste zu arbeiten. Ich musste mich jedoch mit einer sehr großen Anzahl von fehlerhaften Include-Headern auseinandersetzen. Bei der ausführlichen Debug-Ausgabe hat das Entfernen einer IDE 30 Sekunden lang eingefroren, während die Debug-Ausgabe ausgegeben wurde, wodurch der Prozess sehr langsam ablief.

Ich wurde ungeduldig und schrieb ein schnelles und schmutziges Python-Skript, um die (Visual Studio 2010) Projektdateien für mich zu überprüfen und alle fehlenden Dateien auf einmal zusammen mit den Filtern auszugeben, in denen sie sich befinden. Sie finden es als Geben Sie hier Folgendes an: https://gist.github.com/antiuniverse/3825678 (oder diese Gabelung, die relative Pfade unterstützt )

Beispiel:

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)
  ...

Quellcode:

#!/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 + ")")
Neverender
quelle
Der Code wurde geändert, um relative Pfade zu unterstützen. Fühlen Sie sich frei, Ihren Kern zu aktualisieren und den Link zu meiner Gabelung zu entfernen!
ixe013
Das hat bei mir super geklappt! Was für eine Zeitersparnis! Vielen Dank! Ich hatte NICHTS in der Diagnoseausgabe, das mir sagte, was falsch war, aber Ihr Dienstprogramm hat es mir gezeigt!
Ed Bayiates
Eine weitere Gabelung, um ein Verzeichnis aufzulisten
paulm
8

Ich habe eine CPP und einige Header-Dateien von der Lösung (und von der Festplatte) gelöscht, hatte aber immer noch das Problem.

Jede Datei, die der Compiler verwendet, befindet sich in einer * .tlog-Datei in Ihrem temporären Verzeichnis. Wenn Sie eine Datei entfernen, wird diese * .tlog-Datei nicht aktualisiert. Dies ist die Datei, die von inkrementellen Builds verwendet wird, um zu überprüfen, ob Ihr Projekt auf dem neuesten Stand ist.

Bearbeiten Sie diese .tlog-Datei entweder manuell oder bereinigen Sie Ihr Projekt und erstellen Sie es neu.

Alexandre Pelletier
quelle
Das war es für mich! Ich verbrachte Stunden damit, die fehlenden Include-Dateien zu reparieren. STILL war veraltet. Die Protokollierung ergab, dass das, was fehlte, nicht eindeutig erfasst wurde. Musste diese TLOG-Dateien loswerden! Vielen Dank!
Ed Bayiates
6

Ich hatte ein ähnliches Problem, aber in meinem Fall fehlten keine Dateien. Es gab einen Fehler bei der Definition der PDF-Ausgabedatei: Ich habe das Suffix .pdb vergessen (ich habe es mit dem Debug-Protokollierungstrick herausgefunden).

Um das Problem zu lösen, habe ich in der Datei vxproj die folgende Zeile geändert:

<ProgramDataBaseFileName>MyName</ProgramDataBaseFileName>

zu

<ProgramDataBaseFileName>MyName.pdb</ProgramDataBaseFileName>
JJTh
quelle
6

Ich hatte dieses Problem in VS2013 (Update 5) und es kann zwei Gründe dafür geben, die Sie beide finden können, indem Sie "Detaillierte" Build-Ausgabe unter "Tools" -> "Projekte und Lösungen" -> "Build and Run" aktivieren. .

  1. "Forcing recompile of all source files due to missing PDB "..."
    Dies geschieht, wenn Sie die Ausgabe von Debug-Informationen in Ihren Compiler-Optionen deaktivieren (Unter Projekteinstellungen: „C / C ++“ -> „Debug-Informationsformat“ auf „Keine“ und „Linker“ -> „Debug-Informationen generieren“ auf „Nein“ :) . Wenn Sie „C / C ++“ -> „Name der Programmdatenbankdatei“ standardmäßig verlassen haben (dies ist „$ (IntDir) vc $ (PlatformToolsetVersion) .pdb“), findet VS die Datei aufgrund eines Fehlers ( https) nicht : //connect.microsoft.com/VisualStudio/feedback/details/833494/project-with-debug-information-disabled-always-rebuilds ).
    Um dies zu beheben, löschen Sie einfach den Dateinamen auf "" (leeres Feld).

  2. "Forcing rebuild of all source files due to a change in the command line since the last build."
    Dies scheint auch ein bekannter VS-Fehler zu sein ( https://connect.microsoft.com/VisualStudio/feedback/details/833943/forcing-rebuild-of-all-source-files-due-to-a-change-in- die-Befehlszeile seit dem letzten Build ) und scheint in neueren Versionen (aber nicht VS2013) behoben zu sein. Ich kannte keine Problemumgehung, aber wenn Sie dies tun, posten Sie es auf jeden Fall hier.

Bim
quelle
1
Deshalb mein Problem. Keine der "nicht aktuellen" Nachrichten war auf meiner und es hat ewig gedauert, bis wir sie aufgespürt haben. Auch das Entfernen oder Setzen auf $ (IntDir) $ (ProjectName) .pdb hat bei uns funktioniert (ändern Sie es unbedingt sowohl für Debug- als auch für Release-Konfigurationen)
John Grabanski
4

Ich weiß nicht, ob jemand anderes das gleiche Problem hat, aber die Eigenschaften meines Projekts wurden "Configuration Properties" -> C/C++ -> "Debug Information Format"auf "Keine" gesetzt, und als ich es wieder auf die Standard "Programmdatenbank (/ Zi)" zurückstellte, konnte das Projekt nicht jedes Mal neu kompiliert werden .

paulie4
quelle
1
+1 Dies funktioniert auch für mich in Visual Studio 2013. Insbesondere wenn ich es wieder auf Keine umschalte , funktioniert es auch wieder einwandfrei.
user541686
4

Eine weitere einfache Lösung, auf die das Visual Studio Forum verweist .

Ändern der Konfiguration: Menü ExtrasOptionenProjekte und LösungenVC ++ - ProjekteinstellungenProjektmappen- Explorer-Modus, um alle Dateien anzuzeigen .

Anschließend können Sie alle Dateien im Projektmappen-Explorer anzeigen.

Suchen Sie die mit dem gelben Symbol gekennzeichneten Dateien und entfernen Sie sie aus dem Projekt.

Es ist in Ordnung.

Christophe
quelle
4

Visual Studio 2013 - "Erzwingen der Neukompilierung aller Quelldateien aufgrund fehlenden PDB". Ich habe die detaillierte Build-Ausgabe aktiviert, um das Problem zu lokalisieren: Ich habe die "detaillierte" Build-Ausgabe unter "Tools" → "Projekte und Lösungen" → "Build and Run" aktiviert.

Ich hatte mehrere Projekte, alle C ++, ich habe die Option für unter Projekteinstellungen festgelegt: (C / C ++ → Debug-Informationsformat) auf Programmdatenbank (/ Zi) für das Problemprojekt. Dies hat das Problem für dieses Projekt jedoch nicht gestoppt. Das Problem kam von einem der anderen C ++ - Projekte in der Lösung.

Ich habe alle C ++ - Projekte auf "Program Database (/ Zi)" gesetzt. Dies hat das Problem behoben.

Auch hier war das Projekt, das das Problem meldete, nicht das Problemprojekt. Versuchen Sie, alle Projekte auf "Programmdatenbank (/ Zi)" zu setzen, um das Problem zu beheben.

user3097514
quelle
VS2015 ist das gleiche in Bezug auf die Einstellung für die ausführliche Build-Ausgabe
LOAS
3

Ich bin heute auf dieses Problem gestoßen, aber es war ein bisschen anders. Ich hatte ein CUDA-DLL-Projekt in meiner Lösung. Das Kompilieren in einer sauberen Lösung war in Ordnung, aber ansonsten schlug es fehl und der Compiler behandelte das CUDA-DLL-Projekt immer als nicht aktuell.

Ich habe die Lösung aus diesem Beitrag ausprobiert .

In meiner Lösung fehlt jedoch keine Header-Datei. Dann fand ich den Grund in meinem Fall heraus.

Ich habe das Zwischenverzeichnis des Projekts bereits geändert, obwohl es keine Probleme verursacht hat. Und jetzt, als ich das Zwischenverzeichnis des CUDA DLL-Projekts wieder in $ (Konfiguration) \ geändert habe, funktioniert alles wieder richtig.

Ich denke, es gibt ein kleines Problem zwischen der CUDA-Build-Anpassung und dem nicht standardmäßigen Zwischenverzeichnis.

Masse Zhou
quelle
Mit VS2013 (C #) habe ich mit dem Festlegen von IntermediateOutputPath experimentiert. Wenn dies auf einen Ordner auf einem anderen Laufwerk als der Lösung verweist, funktioniert die inkrementelle Erstellung nicht mehr - MSBuild beschwert sich, dass einige Quelldateien mit einer Zwischendatei (normalerweise einem PDB) immer veraltet sind. Siehe meinen Blog-Beitrag .
Robert Schmidt
3

Ich hatte ein ähnliches Problem und befolgte die obigen Anweisungen (die akzeptierte Antwort), um die fehlenden Dateien zu finden, aber nicht ohne meinen Kopf zu kratzen. Hier ist meine Zusammenfassung dessen, was ich getan habe. Um genau zu sein, fehlen keine Dateien, da sie vom Projekt nicht erstellt werden müssen (zumindest in meinem Fall), sondern Verweise auf Dateien, die nicht auf der Festplatte vorhanden sind und nicht wirklich benötigt werden.

Hier ist meine Geschichte:

  1. Unter Windows 7 befindet sich die Datei unter %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\%. Es gibt zwei ähnliche Dateien devenv.exe.config.configund devenv.exe.config. Sie möchten später eine ändern.

  2. Unter Windows 7 haben Sie keine Berechtigung zum Bearbeiten dieser Datei in Programmdateien. Kopieren Sie es einfach an eine andere Stelle (Desktop), ändern Sie es und kopieren Sie es zurück in den Speicherort der Programmdateien.

  3. Ich habe versucht herauszufinden, wie DebugView mit der IDE verbunden werden kann, um die fehlenden Dateien anzuzeigen . Du musst nichts tun. Führen Sie es einfach aus, und es werden alle Nachrichten erfasst. Stellen Sie sicher, dass Capture Eventsim CaptureMenü die Menüoption ausgewählt ist, die standardmäßig ausgewählt werden soll.

  4. DebugView zeigt NICHT alle fehlenden Dateien auf einmal an (zumindest nicht für mich)! Sie würden DebugView ausführen lassen und dann das Projekt in Visual Studio 2010 ausführen. Es wird die project out of dateMeldung angezeigt , wählen Sie Ja zum Erstellen und DebugView zeigt die erste Datei an, die fehlt oder die Neuerstellung verursacht. Öffnen Sie die Projektdatei (keine Lösungsdatei) im Editor, suchen Sie nach dieser Datei und löschen Sie sie. Schließen Sie Ihr Projekt besser und öffnen Sie es erneut, während Sie diesen Löschvorgang ausführen. Wiederholen Sie diesen Vorgang, bis in DebugView keine fehlenden Dateien mehr angezeigt werden.

  5. Es ist hilfreich, den Nachrichtenfilter über die DebugView-Symbolleistenschaltfläche oder die Option BearbeitenFilter / Hervorheben auf nicht aktuell einzustellen . Auf diese Weise werden nur Nachrichten angezeigt, die die Zeichenfolge "Nicht aktuell" enthalten.

Ich hatte viele Dateien, die unnötige Verweise waren, und das Entfernen aller Dateien behebt das Problem gemäß den obigen Schritten.

Zweiter Weg, um alle fehlenden Dateien auf einmal zu finden

Es gibt eine zweite Möglichkeit, diese Dateien auf einmal zu finden. Sie umfasst jedoch (a) die Quellcodeverwaltung und (b) die Integration in Visual Studio 2010. Fügen Sie Ihr Projekt mit Visual Studio 2010 einem gewünschten Speicherort oder Dummy-Speicherort in der Quelle hinzu Steuerung. Es wird versucht, alle Dateien hinzuzufügen, einschließlich derjenigen, die nicht auf der Festplatte vorhanden sind, auf die jedoch in der Projektdatei verwiesen wird. Gehen Sie zu Ihrer Versionsverwaltungssoftware wie Perforce , und diese Dateien, die nicht auf der Festplatte vorhanden sind, sollten in einem anderen Farbschema markiert werden. Perforce zeigt sie mit einem schwarzen Schloss. Dies sind Ihre fehlenden Referenzen. Jetzt haben Sie eine Liste von allen, und Sie können alle mit Notepad aus Ihrer Projektdatei löschen, und Ihr Projekt würde sich nicht darüber beschweren, dass es veraltet ist .

zar
quelle
2

Für mich war es das Vorhandensein einer nicht vorhandenen Header-Datei unter "Header-Dateien" im Projekt. Nachdem Sie diesen Eintrag entfernt haben (Rechtsklick> Aus Projekt ausschließen), werden Sie ihn zuerst neu kompiliert und dann direkt

========== Build: 0 erfolgreich, 0 fehlgeschlagen, 5 aktuell, 0 übersprungen ==========

und es wurde kein Versuch unternommen, ohne Modifikation wieder aufzubauen. Ich denke, es handelt sich um eine von VS2010 implementierte Prüfung vor dem Erstellen (nicht sicher, ob dies dokumentiert ist), die das Flag "AlwaysCreate" auslöst.

Cristian Amarie
quelle
2

Wenn Sie den Befehlszeilenbefehl MSBuild verwenden (nicht die Visual Studio-IDE), z. B. wenn Sie AppVeyor als Ziel festlegen oder nur die Befehlszeile bevorzugen, können Sie diese Option zu Ihrer MSBuild-Befehlszeile hinzufügen:

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

Wie hier dokumentiert (Warnung: übliche MSDN-Ausführlichkeit). Wenn der Build abgeschlossen ist, suchen Sie nach der Zeichenfolge will be compiledin der Protokolldatei, die während des Builds erstellt wurde MyLog.log.

qris
quelle
1
/ Ausführlichkeit: Detailliert gibt auch die gleichen Informationen, ist aber nicht so ausführlich. Sie können dann nach "wird kompiliert als" suchen.
Shane Gannon
1
Sie sollten auch nach "Quellensammlung erforderlich" suchen, wo auch Links zu finden sind
Shane Gannon
2

Ich verwende Visual Studio 2013 Professional mit Update 4, habe jedoch mit keinem der anderen Vorschläge eine Lösung gefunden. Es ist mir jedoch gelungen, das Problem für mein Teamprojekt zu beheben.

Folgendes habe ich getan, um das Problem zu verursachen:

  • Neues Klassenobjekt erstellt (Projekt -> Klasse hinzufügen)
  • Benennen Sie die Datei über den Projektmappen-Explorer um und klicken Sie auf Ja, wenn Sie gefragt werden, ob ich alle übereinstimmenden Verweise automatisch umbenennen möchte

Folgendes habe ich getan, um das Problem zu lösen:

  • Gehen Sie zu Team Explorer Home
  • Klicken Sie auf Versionsverwaltungs-Explorer
  • Bohren Sie in den Ordner, in dem sich alle Klassen- / Projektdateien befinden
  • Den ORIGINAL-Dateinamen in der Liste gefunden und per Rechtsklick gelöscht
  • Bauen

Wenn dies bei Ihnen der Fall ist, stellen Sie sicher, dass Sie die Phantomdatei löschen und nicht die eigentliche, die Sie im Projekt behalten möchten.

Joshua Barker
quelle
1

Ich hatte dieses Problem und fand Folgendes:

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

Visual C ++ - Projekt ständig veraltet ( winwlm.h macwin32.h rpcerr.h macname1.hfehlt)

Problem:

In Visual C ++ .Net 2003 gab eines meiner Projekte immer an, veraltet zu sein, obwohl sich nichts geändert hatte und im letzten Build keine Fehler gemeldet wurden.

Beim Öffnen der Datei BuildLog.htm für das entsprechende Projekt wurde eine Liste von PRJ0041-Fehlern für diese Dateien angezeigt, von denen keiner auf meinem System irgendwo angezeigt wird: winwlm.h macwin32.h rpcerr.h macname1.h

Jeder Fehler sieht ungefähr so ​​aus:

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

Ihr Projekt wird möglicherweise noch erstellt, aber möglicherweise weiterhin veraltet angezeigt, bis diese Datei gefunden wird.

Lösung:

Einfügen afxres.hstatt resource.hin die RC-Datei des Projekts.

Die RC-Datei des Projekts enthielt "#include resource.h". Da der Ressourcen-Compiler Präprozessorblöcke nicht berücksichtigt #ifdef, wird er durchbrechen und versuchen, Include-Dateien zu finden, die ignoriert werden sollten. Windows.h enthält viele solcher Blöcke. Das Einbeziehen von afxres.h hat stattdessen die PRJ0041-Warnungen behoben und den Fehlerdialog "Projekt ist veraltet" beseitigt.

user541686
quelle
1

In meinem Fall enthält eines der Projekte mehrere IDL-Dateien. Der MIDL-Compiler generiert für jede von ihnen eine DLL-Datendatei mit dem Namen 'dlldata.c', unabhängig vom IDL-Dateinamen. Dies führte dazu, dass Visual Studio die IDL-Dateien bei jedem Build kompilierte, auch ohne Änderungen an den IDL-Dateien.

Die Problemumgehung besteht darin, für jede IDL-Datei eine eindeutige Ausgabedatei zu konfigurieren (der MIDL-Compiler generiert immer eine solche Datei, auch wenn der Schalter / dlldata weggelassen wird):

  • Klicken Sie mit der rechten Maustaste auf die IDL-Datei
  • Wählen Sie Eigenschaften - MIDL - Ausgabe
  • Geben Sie einen eindeutigen Dateinamen für die Eigenschaft DllData File ein
Sven Vranckx
quelle
1

Ich habe viele Stunden damit verbracht, mir darüber die Haare auszureißen. Die Build-Ausgabe war nicht konsistent. Unterschiedliche Projekte wären aus unterschiedlichen Gründen von einem Build zum nächsten aufeinanderfolgenden Build "nicht aktuell". Ich fand schließlich heraus, dass der Schuldige DropBox (3.0.4) war. Ich verbinde meinen Quellordner von ... \ DropBox mit meinem Projektordner (nicht sicher, ob dies der Grund ist), aber DropBox "berührt" Dateien während eines Builds irgendwie . Die Synchronisierung wurde unterbrochen und alles ist stets auf dem neuesten Stand.

avenmore
quelle
1

Es gibt einige mögliche Gründe, und wie bereits erwähnt, müssen Sie diese zuerst diagnostizieren, indem Sie die MSBuild-Ausführlichkeit auf "Diagnose" setzen. Meistens ist der angegebene Grund selbsterklärend und Sie können sofort darauf reagieren, ABER gelegentlich behauptet MSBuild fälschlicherweise, dass einige Dateien geändert wurden und kopiert werden müssen.

In diesem Fall müssen Sie entweder das NTFS-Tunneling deaktivieren oder Ihren Ausgabeordner an einen neuen Speicherort duplizieren. Hier ist es in mehr Worten.

Ofek Shilon
quelle
1

Das passierte mir mehrmals und ging dann weg, bevor ich herausfinden konnte warum. In meinem Fall war es:

Falsche Systemzeit im Dual-Boot-Setup!

Es stellte sich heraus, dass mein Dual-Boot mit Ubuntu die Hauptursache war !! Ich war zu faul, um Ubuntu zu reparieren und nicht mehr mit meiner Hardware-Uhr herumzuspielen. Wenn ich mich bei Ubuntu anmelde, springt die Zeit 5 Stunden vorwärts.

Aus Pech habe ich das Projekt einmal mit der falschen Systemzeit erstellt und dann die Zeit korrigiert. Infolgedessen hatten alle Build-Dateien falsche Zeitstempel, und VS würde denken, dass sie alle veraltet sind, und das Projekt neu erstellen.

Maghoumi
quelle
1

Die meisten Build-Systeme verwenden Datenzeitstempel, um zu bestimmen, wann Neuerstellungen stattfinden sollen. Der Datums- / Zeitstempel aller Ausgabedateien wird mit der letzten geänderten Zeit der Abhängigkeiten verglichen. Wenn eine der Abhängigkeiten frischer ist, wird das Ziel neu erstellt.

Dies kann zu Problemen führen, wenn eine der Abhängigkeiten einen ungültigen Datenzeitstempel erhält, da es schwierig ist, dass der Zeitstempel einer Build-Ausgabe jemals den Zeitstempel einer Datei überschreitet, die angeblich in der Zukunft erstellt wurde: P.

Chris Becke
quelle
Ist es möglich, den Grund zu finden, warum VS2010 einen Umbau erzwingt oder ein Projekt für aktuell hält?
Chris U
In VS6 oder vielleicht VS2005 gab es einen seltsamen kleinen Eigenschaftsdialog, den man erhalten würde, wenn man mit der rechten Maustaste auf ein Projekt klickte, dessen Registerkarten die Abhängigkeiten und Ausgaben jeder Datei in einem Projekt zeigten. Ich weiß nicht, wie ich den entsprechenden Bericht in VS2008 (oder VS2010) erhalten soll
Chris Becke
1

Für mich trat das Problem in einem WPF-Projekt auf, in dem für einige Dateien die Eigenschaft "Build Action" auf "Resource" und die Eigenschaft "Copy to Output Directory" auf "Copy if new" gesetzt war. Die Lösung schien darin zu bestehen, die Eigenschaft "In Ausgabeverzeichnis kopieren" in "Nicht kopieren" zu ändern.

msbuild kann keine 'Resource'-Dateien in die Ausgabe kopieren - löst jedoch einen Build aus, wenn sie nicht vorhanden sind. Vielleicht könnte das als Fehler angesehen werden?

Es ist sehr hilfreich bei den Antworten hier, die darauf hinweisen, wie man msbuild dazu bringt, die Bohnen darüber zu verschütten, warum es immer alles baut!

LOAS
quelle
0

Wenn Sie die Argumente des Debugging-Befehls für das Projekt ändern, wird dadurch auch die Meldung ausgelöst, dass das Projekt neu erstellt werden muss. Obwohl das Ziel selbst nicht von den Debugging-Argumenten betroffen ist, haben sich die Projekteigenschaften geändert. Wenn Sie jedoch neu erstellen, sollte die Nachricht verschwinden.

Cathy
quelle
0

Ich hatte ein ähnliches Problem mit Visual Studio 2005 und meine Lösung bestand aus fünf Projekten in der folgenden Abhängigkeit (zuerst oben erstellt):

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.

Ich stellte fest, dass das Video_Codec-Projekt auch nach einer vollständigen Bereinigung und einem erneuten Erstellen der Lösung einen vollständigen Build wünschte.

Ich habe dies behoben, indem ich sichergestellt habe, dass die pdbAusgabedatei von C / C ++ und Linker mit dem von den anderen Arbeitsprojekten verwendeten Speicherort übereinstimmt. Ich habe auch RTTI eingeschaltet.

Hinchy
quelle
0

Ein weiteres Problem in Visual Studio 2015 SP3, aber ich habe vor einigen Jahren ein ähnliches Problem in Visual Studio 2013 festgestellt.

Mein Problem war, dass irgendwie eine falsche CPP-Datei für vorkompilierte Header verwendet wurde (also hatte ich zwei CPP-Dateien, die die vorkompilierten Header erstellt haben). Warum hat Visual Studio die Flags auf der falschen CPP geändert, um ohne meine Anfrage vorkompilierte Header zu erstellen? Ich habe keine Ahnung, aber es ist passiert ... vielleicht ein Plugin oder so ???

Auf jeden Fall enthält die falsche CPP-Datei die Datei version.h, die bei jedem Build geändert wird. Visual Studio erstellt also alle Header neu und aus diesem Grund das gesamte Projekt.

Nun ist es wieder normal.

Waldemar
quelle
0

Ich hatte ein VC ++ - Projekt, das immer alle Dateien kompilierte und zuvor (von anderen Personen) von VS2005 auf VS2010 aktualisiert wurde. Ich fand heraus, dass alle cpp-Dateien im Projekt außer StdAfx.cpp auf Create (/ Yc) the vorkompilierten Header gesetzt waren. Ich habe dies so geändert, dass nur StdAfx.cpp festgelegt wurde, um den vorkompilierten Header zu erstellen, und der Rest wurde auf Verwenden (/ Yu) des vorkompilierten Headers festgelegt. Dies hat das Problem für mich behoben.

Philip Beck
quelle
0

Ich bin in Visual Studio 2013 und habe gerade auf das Windows 10-Update vom 10. Mai 2019 aktualisiert. Das Kompilieren musste plötzlich jedes Mal wiederholt werden, unabhängig von Änderungen. Ich habe versucht, die pch in ProjectName anstelle von TargetName umzubenennen, habe nach fehlenden Dateien mit dem detaillierten Protokoll und dem Python-Skript gesucht, aber am Ende war es meine Zeit, die nicht mit den Servern von MS synchronisiert wurde (etwa Millisekunden).

Was das für mich gelöst hat, war

  • "Datum und Uhrzeit einstellen" im Bedienfeld
  • "Jetzt synchronisieren"

Jetzt müssen meine Projekte nicht mehr ohne Grund neu kompiliert werden.

TankorSmash
quelle
0

Ich denke, dass Sie einen Zeilenumbruch oder ein anderes Leerzeichen platziert haben. Entfernen Sie es und drücken Sie erneut F5.


quelle
-3

Die .NET-Projekte werden unabhängig davon immer neu kompiliert. Ein Teil davon besteht darin, die IDE auf dem neuesten Stand zu halten (z. B. IntelliSense). Ich erinnere mich, dass ich diese Frage vor Jahren in einem Microsoft-Forum gestellt habe, und dies war die Antwort, die mir gegeben wurde.

Preet Sangha
quelle
1
In VS2008 wurde das Projekt nicht jedes Mal neu erstellt. Dies ist sehr ärgerlich, da die DLL sehr niedrig ist und fast alle meine DLLs zum Neuaufbau zwingt. Bei der Migration ist etwas schiefgegangen, und ich kann nicht herausfinden, was.
Chris U
2
2008, 2010, 2012 und 2013 werden nicht jedes
Mal
Es wird eine Hintergrundkompilierung durchgeführt (und denken Sie daran, dass diese Antwort 10 Jahre alt ist), um die Intellisense-Funktion aufrechtzuerhalten. I
Preet Sangha