Почему @(DocFileItem) не найден во время задачи MSBuild AfterBuild?

Я пытаюсь выполнить постобработку XML-файла документации как XSLT-преобразование после сборки (используя новый XSLTransformation), но сборка завершается с ошибкой Unable to execute transformation. Could not find file 'C:\...\documentation.XML'. XML-файл документации отображается на диске после завершения сборки, но на этапе AfterBuild его просто нет: <Exec Command="dir $(ProjectDir)$(DocumentationFile)"/> не находит файл, и <Exec Command="$(ProjectDir)$(DocumentationFile)"/> тоже.

Шаг XslTransformation запускается из задачи с именем AfterBuild и объявляется зависящим от шага Compile. По-видимому, я что-то упустил в том, как эта задача объявляется, чтобы она не запускалась до завершения XML-файла документации, но я не могу понять, что.


person Remus Rusanu    schedule 28.06.2010    source источник


Ответы (2)


Похоже, это ошибка в системе сборки IDE, согласно http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/8a2f4af8-7a57-454f-aa7d-684f3f89acf3.: сборка IDE переименовывает $(DocumentationFile) в файл .tmp во время сборки и переименовывает его в соответствующий XML-файл документации после завершения сборки. Я не могу себе представить, зачем им это делать, кроме как для личного удовлетворения злого менеджера проекта, который, должно быть, теперь дьявольски смеется, читая это...

person Remus Rusanu    schedule 29.06.2010

У меня это отлично работает с этим целевым объявлением:

<Target Name="AfterBuild">
  <Copy SourceFiles="$(ProjectDir)$(DocumentationFile)"
        DestinationFolder="C:\..\CopyDirectory"/>
</Target>

Вы должны попытаться удалить зависимость на шаге Compile.

person Julien Hoarau    schedule 28.06.2010
comment
Это на самом деле не работает для меня. Или, если быть точным, всегда срабатывает однажды сразу после открытия проекта. Сборка завершается, и файлы копируются. Но когда я снова создаю, я получаю ошибку Unabled to copy file... Could not find file... - person Remus Rusanu; 29.06.2010