MSBuild - проект с событием xcopy после сборки
У меня есть проект, который имеет событие post-build, которое скопирует dll в определенный каталог:
xcopy "$ (TargetDir) $(TargetName).dll" "$ (SolutionDir)..\UdpLocationService\bin\Plugins \" /d/y
xcopy "$ (TargetDir) $(TargetName).pdb" "$ (SolutionDir)..\UdpLocationService\bin\Plugins \" /d/y
Тем не менее, у меня есть CruiseControl.NET, настроенный как сервер сборки, и MSBuild не удается построить этот проект из-за этого события xcopy post-build:
MSB3073: команда "xcopy" C:\Build\Services\Windows\VehicleServer\Plugins\Payload\bin\Debug\Payload.dll "Undefined..\UdpLocationService\bin\Plugins\" /d/y xcopy "C:\Build\Services\Windows\VehicleServer\Plugins\Payload\bin\Debug\Payload.pdb" "Undefined..\UdpLocationService\bin\Plugins \" /d/y "завершена с помощью код 4. в Microsoft.Common.targets(3397, 13)
Любые предложения, чтобы устранить это? Спасибо,
Джастин
Ответы
Ответ 1
Выполните следующие действия:
- Выгрузите файл проекта (например, *.csproj)
- Откройте файл проекта для редактирования
- Найти цель AfterBuild
- Отделите два вызова XCopy на две отдельные задачи Exec
- Сохраните изменения и перезагрузите файл проекта
Ответ 2
Я столкнулся с той же проблемой с TeamCity.
Проблема заключается в свойстве $(SolutionDir) в файле сборки. Вы не определили его в своем обращении к MsBuild (вот почему вы видите слово undefined в своем выходе).
Вызовите msbuild с набором свойств, например:
msbuild myproject.csproj /property:SolutionDir="solution directory"\
Где "каталог решений" - это каталог, содержащий файл решения. Обратите внимание на конечную косую черту, вам нужно, чтобы путь был правильно сформирован.
Ответ 3
Я исправил это для проблем с пакетом Microsoft.SqlServer.Compact nuget (который добавляет аналогичную пост-сборку script), добавив:
<SolutionDir Condition="'$(SolutionDir)'=='' or '$(SolutionDir)'=='*Undefined*'">..\</SolutionDir>
прямо над <PostBuildEvent>
. Вы хотите настроить относительный путь в соответствии с макетом проекта.