Событие сборки после публикации в Visual Studio - Скопировать в относительное расположение каталога

StackOverflow https://stackoverflow.com/questions/834270

Вопрос

При успешной сборке я хочу скопировать содержимое выходного каталога в другое место под тем же "база" папка.Эта родительская папка является относительной частью и может варьироваться в зависимости от настроек системы управления версиями.

Я перечислил несколько доступных мне значений макросов ...

$(SolutionDir) = D:\GlobalDir\Version\AppName\Решение1\сборка

$(ProjectDir) = D:\GlobalDir\Version\AppName\Решение1\Версия\Проект\

Я хочу скопировать содержимое выходного каталога в следующую папку :

D:\GlobalDir\Version\AppName\Решение2\Проект\Зависимость

Базовое местоположение "D:\GlobalDir\Version\AppName " должно быть выбрано из одного из вышеупомянутых макросов.Однако ни одно из значений макроса не перечислено Только родительское местоположение.

Как мне извлечь Только базовое расположение для команды копирования после сборки ?

Это было полезно?

Решение

Если ни один из TargetDir или других макросов не указывает на нужное место, используйте каталог "..", чтобы вернуться назад по иерархии папок.

т. е.Использование $(SolutionDir)\..\.. чтобы получить ваш базовый каталог.


Список всех макросов смотрите здесь:

http://msdn.microsoft.com/en-us/library/c02as0cs.aspx

Другие советы

Вот что вы хотите поместить в командную строку события проекта после сборки:

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"

Редактировать:Или если ваше целевое имя отличается от названия проекта.

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"

Вы могли бы попробовать:

$(SolutionDir)..\..\

Я думаю, что это связано, но у меня возникла проблема при создании непосредственно с использованием msbuild командная строка (из пакетного файла) против сборки изнутри VS.

Используя что-то вроде следующего:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(примечание: start XCOPY вместо того , чтобы XCOPY используется для решения проблемы с разрешениями, которая препятствовала копированию)

Макрос $(SolutionDir) оцененный до ..\ при выполнении msbuild из пакетного файла, что привело к XCOPY сбой команды.В остальном он отлично работал при сборке из Visual Studio.Подтвержденное использование /verbosity:diagnostic чтобы увидеть оцененный результат.

Использование макроса $(ProjectDir)..\ вместо этого, что равносильно одному и тому же, сработало нормально и сохранило полный путь в обоих сценариях сборки.

Разве не имело бы смысла использовать msbuild напрямую?Если вы делаете это с каждой сборкой, то вы можете добавить задачу msbuild в конце?Если вы просто хотите посмотреть, не можете ли вы найти другое значение макроса, которое не отображается в среде разработки Visual Studio, вы могли бы переключить параметры msbuild в режим диагностики, и это покажет вам все переменные, которые вы могли бы использовать, а также их текущее значение.

Чтобы включить это в Visual Studio, перейдите в "Инструменты / параметры", затем прокрутите древовидное представление вниз до раздела "Проекты и решения", разверните его и нажмите "Построить и выполнить", справа от них находится выпадающий список, в котором указывается детализация выходных данных сборки. Установив значение "Диагностика", вы увидите, какие другие значения макросов вы могли бы использовать.

Поскольку я не совсем понимаю, до какого уровня вы хотели бы подняться и насколько сложной вы хотите сделать свою сборку, это может дать вам некоторое представление.Недавно я занимался сценариями сборки, которые даже выполняют SQL-код как часть сборки.Если вам нужна дополнительная помощь или даже несколько примеров сценариев сборки, дайте мне знать, но если это всего лишь небольшой процесс, который вы хотите запустить в конце сборки, то, возможно, использование полного сценария msbuild немного перебарщивает.

Надеюсь, это поможет Рихан

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top