197 votes

VS2010 pense toujours que le projet est obsolète mais rien n'a changé

J'ai un problème similaire, comme décrit ici.

J'ai aussi mis à jour une solution mixte de C++/CLI et les projets C# à partir de VS2008 à VS2010. Et maintenant, dans VS2010 C++/CLI projet toujours à court de date. Même s'il a été compilé et lié juste avant et F5 est frappé de la messagebox "Le projet est obsolète. Aimeriez-vous construire?" s'affiche. C'est très ennuyeux parce que la dll est très bas niveaux et les forces de presque tous les projets de la solution à reconstruire.

Mon apb les paramètres à leur valeur par défaut (suggéré la solution de ce problème).

Est-il possible de l'obtenir de la raison pour laquelle VS2010 forces d'une reconstruction ou pense qu'un projet est à jour?
Toutes les autres idées pourquoi VS2010 se comporte comme ça?

225voto

Mosc Points 1806

Pour Visual Studio Express 2010. Voir d'autres (plus facile) des réponses pour VS2012, VS2013, etc

Pour trouver le fichier manquant(s), l'utilisation des informations de l'article Activer C++ projet de journalisation du système pour activer la journalisation du débogage dans Visual Studio et laisser juste vous dire quelle est la cause de la reconstruction:

  1. Ouvrez l' devenv.exe.config le fichier (qui se trouve dans %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\ ou %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\). Pour Exprimer les versions du fichier de configuration nommé V*Express.exe.config.
  2. Ajoutez le code suivant après l' </configSections> ligne:

    <system.diagnostics>
      <switches>
        <add name="CPS" value="4" />
      </switches>
    </system.diagnostics>
    
  3. Redémarrez Visual Studio
  4. Ouvrir DbgView et assurez-vous que c'est la capture de la sortie de débogage
  5. Essayez de déboguer (appuyez sur F5 dans Visual Studio)
  6. Recherche le journal de débogage pour toutes les lignes de la forme:

    devenv.exe Renseignements: 0 : Projet " Bla\Bla\Factice.vcxproj "pas à jour en raison de l'entrée de construction" Bla\Bla\SomeFile.h' est manquant.

    (Je viens de taper Ctrl+F et recherché not up to date) ce seront les références origine du projet à être perpétuellement "out of date".

Pour résoudre ce problème, supprimer toutes les références vers les fichiers manquants à partir de votre projet, ou de mettre à jour les références à indiquer leurs emplacements réels.

Remarque: Si vous utilisez 2012 ou plus tard, puis l'extrait de code devrait être:

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

166voto

Stanislav Points 911

Dans VS2012 j'ai été en mesure d'atteindre plus facilement le même résultat que dans la solution retenue.

J'ai changé l'option dans "Outils->Options->les Projets et les Solutions->Construire et Exécuter->projet MSBuild la sortie de la construction de verbosité" Minime de Diagnostic.

Puis à la sortie de la construction, j'ai trouvé le même sens par la recherche pour "non à jour":

Projet "blabla" n'est pas à jour. Un élément du projet 'c:\foo\bar.xml" a "Copier vers un Répertoire de Sortie' attribut 'Copy'.

60voto

Dave Points 421

Cela m'est arrivé aujourd'hui. J'ai été capable de trouver la cause: Le projet comprenait un fichier d'en-tête qui n'existait plus sur le disque.

Retrait du fichier du projet a résolu le problème.

15voto

Zach Points 91

Nous avons également rencontré ce problème et trouvé la façon de le résoudre.

La question était comme indiqué ci-dessus "Le fichier n'existe plus sur le disque."

Ce n'est pas tout à fait correct, le fichier n'existe pas sur le disque mais le .VCPROJ fichier référençant le fichier quelque part d'autre.

Vous pouvez "découvrir" ce grâce à l'option "inclure le fichier view" et en cliquant sur chaque fichier à inclure à son tour jusqu'à ce que vous trouviez celui que VS ne pouvez pas trouver. Vous pouvez ensuite AJOUTER ce fichier (comme un élément existant) et de supprimer la référence qui ne peut pas être trouvé et tout est ok.

Une question valable est: Comment pouvez-VS construire même si elle ne sait pas où les fichiers à inclure sont?

Nous pensons que l' .vcproj fichier a quelques chemin relatif vers le fichier avi quelque part qu'il ne s'affiche pas dans le VS GUI et cela explique pourquoi le projet permettra de construire réellement, même si l'arborescence de la comprend est incorrect.

12voto

Neverender Points 221

L'on a accepté la réponse m'a aidé sur le chemin de droite pour trouver comment résoudre ce problème pour le fond du projet, j'ai dû commencer à travailler. Cependant, j'ai eu à traiter un très grand nombre de mauvais inclure les en-têtes. Avec le verbose debug de sortie, la suppression de l'une a causé l'IDE de les congeler pendant 30 secondes lors de la sortie de débogage de vomir, ce qui a rendu le processus aller très lentement.

Je suis impatient et a écrit un rapide et sale script python pour vérifier l' (VS 2010) des fichiers de projet pour moi et la production de tous les fichiers manquants à la fois, avec les filtres, ils sont situés dans. Vous pouvez trouver un Résumé ici: https://gist.github.com/antiuniverse/3825678

Exemple:

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

Code Source:

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

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

filterTree = ET.parse(sys.argv[1]+".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(sys.argv[1])
projRoot = projTree.getroot()

for inc in projRoot.iter(ns+'ClInclude'):
    incFileRel = inc.get('Include')
    if incFileRel != None:
        incFile = os.path.join( os.path.dirname(sys.argv[1]), 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 + ")")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X