Инкрементная сборка Visual Studio: файл документации XML создан слишком поздно - PullRequest
4 голосов
/ 16 июля 2009

У меня есть проект DLL для Visual Studio 2005, в котором включен «файл документации XML». Всякий раз, когда я делаю инкрементную сборку, во время выполнения события после сборки в выходном каталоге нет файла документации XML.

Если я приостановлю сборку во время события после сборки (используя утилиту сна из GnuWin32 CoreUtils ), я могу увидеть файл в выходном каталоге с именем, например vs5BB5.tmp. Но этот файл не переименовывается в MyLib.xml до тех пор, пока не будет завершено событие после сборки (и цель "AfterBuild", так как у меня есть некоторые настройки).

Для чистой сборки в Studio и для MSBuild, запущенной из командной строки, все работает как положено - файл документации XML создается до событий после сборки.

Почему это происходит и как исправить инкрементные сборки?

Ответы [ 3 ]

3 голосов
/ 13 августа 2009

Просто возникла та же проблема. Это известная проблема с Visual Studio и инкрементными сборками. См. этот пост на Microsoft Connect .

Я решил это с помощью условной копии, как показано ниже:

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

SF

1 голос
/ 26 мая 2011

Я использую простой пакетный файл для копирования вместо команды копирования по умолчанию, которая обнаруживает файл tmp и вместо этого копирует / переименовывает его.

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"
)
1 голос
/ 16 октября 2009

Просто у меня эта проблема ...

я обнаружил, что xml-файл называется .tmp-файлом, так что вы можете скопировать этот tmp-файл туда, куда вам нужно, это всего лишь небольшая «грязная» работа.

Мне также очень хочется написать для себя инструмент командной строки, который называется что-то вроде: -

WaitForThenCopy <source path> <target path> <milliseconds to wait>

Единственная проблема в том, что он должен быть не блокирующим, и вы не узнаете, сработало оно или нет.

...