2009-07-16 7 views
4

Ich habe ein DLL-Projekt für Visual Studio 2005, das "XML-Dokumentationsdatei" aktiviert hat. Wenn ich einen inkrementellen Build ausführe, befindet sich während der Ausführung des Post-Build-Ereignisses keine XML-Dokumentationsdatei im Ausgabeverzeichnis.Inkrementelles Visual Studio-Build: XML-Dokumentationsdatei wird zu spät erstellt

Wenn ich den Build während des Post-Build-Ereignisses pausiere (mit dem Dienstprogramm "Sleep" von GnuWin32 CoreUtils), kann ich die Datei im Ausgabeverzeichnis mit einem Namen wie vs5BB5.tmp sehen. Aber diese Datei wird nicht in MyLib.xml umbenannt, bis das Post-Build-Ereignis (und das "AfterBuild" -Ziel, da ich einige Anpassungen dort habe) abgeschlossen sind.

Für eine saubere Erstellung in Studio und für MSBuild gestartet von einer Befehlszeile funktioniert alles wie erwartet - XML-Dokumentationsdatei wird vor Post-Build-Ereignissen erstellt.

Warum dies passiert und wie behebe ich inkrementelle Builds?

Antwort

3

War nur das gleiche Problem. Dies ist ein bekanntes Problem mit Visual Studio und inkrementellen Builds. Siehe this post on microsoft connect.

Ich löste es mit einem bedingten xcopy wie unten:

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

SF

+0

Danke für eine gute Antwort. Leider kann ich es nicht als akzeptiert wegen "ungelösten Bounty" -Problem markieren (http://meta.stackexchange.com/questions/1413). – VladV

1

Genau dieses Problem selbst mit ....

was ich gefunden habe ist, dass die xml Datei heißt eine .tmp-Datei, also können Sie diese tmp-Datei dorthin kopieren, wo Sie wollen, es ist nur ein bisschen "chaotisch".

Ich bin auch ganz versucht mir ein etwas wie genannt Kommandozeilen-Tool, das ist zu schreiben: -

einzige Problem ist es nicht blockierende sein müsste, und Sie würden nicht wissen, ob es funktioniert oder nicht.

1

Ich verwende eine einfache Batchdatei, um den Kopiervorgang anstelle des Standardkopierbefehls auszuführen, der die tmp-Datei erkennt und stattdessen kopiert/umbenennt.

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" 
) 
Verwandte Themen