Событие сборки после публикации в Visual Studio - Скопировать в относительное расположение каталога
-
08-07-2019 - |
Вопрос
При успешной сборке я хочу скопировать содержимое выходного каталога в другое место под тем же "база" папка.Эта родительская папка является относительной частью и может варьироваться в зависимости от настроек системы управления версиями.
Я перечислил несколько доступных мне значений макросов ...
$(SolutionDir) = D:\GlobalDir\Version\AppName\Решение1\сборка
$(ProjectDir) = D:\GlobalDir\Version\AppName\Решение1\Версия\Проект\
Я хочу скопировать содержимое выходного каталога в следующую папку :
D:\GlobalDir\Version\AppName\Решение2\Проект\Зависимость
Базовое местоположение "D:\GlobalDir\Version\AppName " должно быть выбрано из одного из вышеупомянутых макросов.Однако ни одно из значений макроса не перечислено Только родительское местоположение.
Как мне извлечь Только базовое расположение для команды копирования после сборки ?
Решение
Если ни один из TargetDir или других макросов не указывает на нужное место, используйте каталог "..", чтобы вернуться назад по иерархии папок.
т. е.Использование $(SolutionDir)\..\..
чтобы получить ваш базовый каталог.
Список всех макросов смотрите здесь:
Другие советы
Вот что вы хотите поместить в командную строку события проекта после сборки:
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 немного перебарщивает.
Надеюсь, это поможет Рихан