2009-07-16 3 views
4

J'ai un projet DLL pour Visual Studio 2005 sur lequel le «fichier de documentation XML» est activé. Chaque fois que je réalise une construction incrémentielle, il n'y a pas de fichier de documentation XML dans le répertoire de sortie lors de l'exécution de l'événement après la construction.Construction incrémentielle Visual Studio: le fichier de documentation XML est créé trop tard

Si je mets en pause la construction au cours de l'événement post-construction (en utilisant l'utilitaire de veille de GnuWin32 CoreUtils), je peux voir le fichier dans le répertoire de sortie avec un nom comme vs5BB5.tmp. Mais ce fichier n'est pas renommé en MyLib.xml jusqu'à ce que l'événement post-build (et la cible "AfterBuild", car j'ai quelques personnalisations) sont terminés. Pour une construction propre dans Studio et pour MSBuild démarré à partir d'une ligne de commande, tout fonctionne comme prévu: le fichier de documentation XML est créé avant les événements de post-construction. Pourquoi cela se produit-il et comment puis-je corriger les générations incrémentielles?

Répondre

3

Avait juste le même problème. Ceci est un problème connu avec Visual Studio et les générations incrémentielles. Voir this post on microsoft connect.

Je l'ai résolu avec un xcopy conditionnel comme celui ci-dessous:

if exist "$(TargetDir)$(TargetName).xml" xcopy $(TargetDir)$(TargetName).xml $(ProjectDir)......\bin\ /C /I /R /Y

SF

+0

Merci pour votre réponse. Malheureusement, je ne peux pas le marquer comme accepté en raison d'un problème de "bounty non résolu" (http://meta.stackexchange.com/questions/1413). – VladV

1

Juste moi-même d'avoir ce problème ....

que j'ai trouvé est que le xml fichier est nommé un fichier .tmp, de sorte que vous pouvez copier ce fichier tmp à l'endroit où vous voulez, c'est juste un peu d'un "désordre" travail autour.

Je suis aussi très tenté de me écrire un thats outil de ligne de commande appelé quelque chose comme: -

seul problème est qu'il devrait être non bloquant et vous ne savoir si cela a fonctionné ou ne pas.

1

J'utilise un simple fichier de commandes pour effectuer la copie au lieu de la commande de copie par défaut qui détecte le fichier tmp et le copie/renomme à la place.

REM There is a bug in VS where the xml documentation is written to a tmp file 
REM during incremental builds, preventing access during post-build events. 
REM See http://connect.microsoft.com/VisualStudio/feedback/details/470485/strange-file-not-found-error-xml-documentation-file-renamed-during-incremental-build 
REM As a work around for following script tries to catch this situation and copys/remanes 
REM this tmp-file instead. 

REM .SYNOPSIS 
REM CopyXmlDocumentation "X:\path\to\source.xml" "Y:\target\dir" 

if exist "%~1%" (
    REM if the file exists, copy it as-is 
    copy /Y "%~1" "%~2" 
) else (
    REM else we try to copy the .tmp file and rename it to the desired target name 
    REM we assume that the tmp file is named "vsXXXX.tmp" where XXXX is an arbitrary string 
    copy /Y "%~d1\%~p1\vs*.tmp" "%~2\%~n1%~x1" 
) 
Questions connexes