2009-09-28 5 views
2

est-il un moyen de savoir la raison pour laquelle un projet est en cours de reconstruction chaque fois une opération de sélection Build est publié dans VS 2008?Raison pour laquelle un projet VS 2008 est en cours de reconstruction à chaque fois

J'ai essayé de supprimer même toutes les dépendances du Build \ Configuration Manager (décoché la colonne de construction pour tous les assemblages, mais celui en question).

Je reçois le même résultat: l'assemblage est reconstruit à chaque fois.

Je dois mentionner que toutes les dépendances sont construites dans le même répertoire (il y a un répertoire de sortie commun).

En fait, il n'est pas très clair pour moi quel est l'algorithme VS/MSBuild pour décider si un projet doit être reconstruit ou non. Vérifie-t-il s'il existe des dépendances (fichiers/assemblages) dont l'horodatage Last Access NTFS est plus récent que celui de l'assembly en question? Peut-être que je pourrais essayer de chercher le fichier "offensant" de cette façon.

+0

Ne mélangez-vous pas entre build et link? Tous les projets sont reliés, mais ne sont pas reconstruits à chaque fois. – Kamarey

+0

Non, c'est vraiment construit à chaque fois.Je peux voir les avertissements du compilateur, tandis que pour les autres projets, je reçois des messages comme celui-ci (pour un projet CL): " Construction démarrée: Projet: CL, Configuration: Déboguer sans licence Toute CPU ------ CL -> D: \ Code \ magnet5Dev \ MagNet \ Build \ Debug \ CL.dll " –

Répondre

0

Je n'ai pas trouvé la cause du problème, mais ils ont trouvé un moyen de se débarrasser des effets:

GetLatestVersion (avec l'option « Ecraser »).

Tout va bien maintenant.

Une chose que j'ai découvert, malheureusement après avoir remplacé les fichiers de projet locaux avec la version de l'espace de travail: il y a une option dans Outils-Options-projets et Solution-projet de construction et d'exécution MSBuild sortie de la construction verbosité .

Cette option est définie sur Par défaut,. Si défini sur Détaillé ou Le diagnostic consignera un grand nombre de messages intéressants dans la fenêtre de sortie lors de la compilation d'un projet. Cela m'a peut-être donné des indications sur la raison pour laquelle le projet était compilé à chaque fois.

0

Je ne suis pas sûr à 100%, mais il semble que les projets avec des avertissements seront toujours reconstruits.

+0

Hmm, c'est étrange, parce que le même projet sur une branche différente (pas très différent car ils sont fusionnés une fois par mois), est reconstruit seulement quand les changements ont eu lieu. Il est vrai que tous les deux ont de nombreux avertissements. –

+1

Non, ce n'est pas vrai. Le processus de construction ne dépend pas des avertissements précédemment trouvés. – Kamarey

1

Existe-t-il une dépendance circulaire entre différents modules/projets dans votre application?

+0

Non, pas de dépendances circulaires, car cela n'est pas supporté par le compilateur. Mais j'ai une référence de service à un service WCF qui a également une référence à la même DLL dll (seule la référence est à l'assembly compilé à partir d'un répertoire DLL, pas la référence du projet). Néanmoins, les mêmes références sont dans l'autre branche qui compile très bien. Le problème pourrait être lié à cela, car le problème est apparu aprox. de même temps, les références de service ont été ajoutées. –

+0

En fait, maintenant que j'ai vérifié, la référence du service WCF est directement au projet de solution (pas une DLL compilée). Mais la référence inverse est toujours une référence de service qui est une sorte de référence "hors ligne". Ce n'est pas mis à jour automatiquement. Donc je suppose que ce n'est pas un problème. Encore une fois, le projet de l'autre branche, qui a également cette référence, n'expose pas le problème. –

3

Avez-vous défini une action Prebuild qui met à jour certains de vos fichiers d'entrée? Aussi une étape de construction personnalisée qui est toujours peut être la raison.

Quel type de projet avez-vous?

+0

Aucun événement de pré-construction sur le projet en question. Mais j'ai des événements de pré-construction sur certaines dépendances. Le type du projet est "Class Library". –

1

Si vous modifiez le AssemblyInfo.cs avec un AssemblyFileVersion mis à jour (comme je le fais avec Cruise Control .Net) par exemple, j'ai trouvé qu'il force une reconstruction.

+0

Nous avons ici un seul fichier AssemblyVersion.cs qui est lié dans chaque projet de la solution. Il ne change pas et il n'est pas copié dans un événement de pré-construction, il ne devrait donc pas déclencher la recompilation. Merci pour votre réponse. –

+0

Oui, j'ai la même configuration avec un seul AssemblyInfo.cs aussi bien. Sur la boîte de construction, je change ce fichier et à cause de cela, il semble forcer une reconstruction – Ryu

+0

Eh bien, dans la boîte de construction, il reconstruit toujours car il n'y a plus d'assemblages entre les builds et je pense qu'il est souhaitable d'être ainsi. Mais sur la boîte DEV, il est vraiment ennuyeux d'attendre la construction même si ce n'est pas nécessaire. –

1

Ceci peut être causé par des règles de préconfiguration MSVC 2008 (récemment ajoutées). Faites un MSVC propre, fermez, supprimez les fichiers .pch et .ncb, rouvrez MSVC et construisez. Cela devrait corriger la compilation inutile.

Questions connexes