SolutionDir установлен в * Undefined * в событии xcopy после сборки - PullRequest
10 голосов
/ 01 июля 2010

У меня есть проект, который имеет событие после сборки, которое копирует библиотеки 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: The command "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" exited with code 4. in Microsoft.Common.targets(3397, 13)

Есть предложения, чтобы исправить это?

Ответы [ 3 ]

24 голосов
/ 15 февраля 2012

Я только что столкнулся с той же проблемой с TeamCity.

Проблема здесь заключается в свойстве $ (SolutionDir) в вашем файле сборки.Вы не определили его в своем вызове MsBuild (вот почему вы видите слово undefined в своем выводе).

Вызовите msbuild с набором свойств, например так:

msbuild myproject.csproj /property:SolutionDir="solution directory"\

Где "каталог решений" - это каталог, содержащий файл решения.Обратите внимание на косую черту, вам понадобится, чтобы убедиться, что путь сформирован правильно.

7 голосов
/ 09 августа 2013

Я исправил это из-за проблем с пакетом nuget Microsoft.SqlServer.Compact (который добавляет аналогичный сценарий после сборки), добавив:

<SolutionDir Condition="'$(SolutionDir)'=='' or '$(SolutionDir)'=='*Undefined*'">..\</SolutionDir>

прямо над <PostBuildEvent>.Вы хотите настроить относительный путь в соответствии с макетом вашего проекта.

4 голосов
/ 02 июля 2010

Выполните следующие действия:

  • Выгрузите файл проекта (например, * .csproj)
  • Откройте файл проекта для редактирования
  • Найдите цель AfterBuild
  • Разделите два вызова XCopy на две отдельные задачи Exec
  • Сохраните изменения и перезагрузите файл проекта
...