Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Post-build event: Копирование результатов сборки в другую папку

#c_sharp #visual_studio #visual_studio_2010


Есть проект с dll, которую после билда постоянно вручную копирую в нужную папку.
Для автоматизации попробовал указать Post-build event. Просто dll скопировать легко: 
copy $(TargetPath) $(SolutionDir)..\..\lib\

А как за ней утянуть еще и xml описание? Не силен в bat'анике, надо как то отрезать
от $(TargetPath) расширение ".dll" или есть другие способы?    


Ответы

Ответ 1



Visual Studio сама копирует все сборки (dll'ки) и соответствующие им xml файлы в выходную папку, если ваш проект на .NET имеет на них ссылки (References), при этом сложные графы зависимостей резолвятся автоматически. С учетом того, что вы говорите о копировании xml файлов, предположительно, с документацией к сборке, то речь видимо идет о некоторой managed сборке. Таким образом, можно предположить, вы просто неправильно проставили настройки References в вашем проекте, поскольку копирование dll'ок, необходимых для запуска проекта должно происходить автоматически. Файлы с xml документацией по сборкам также копируются автоматически. Если я где-то ошибся в своих предположениях, то могу предложить вам более общее решение. Вместо того, чтобы как-то отрезать от названий файлов расширения и реализовывать некоторую сложную логику в Post-Build Events, сделайте примерно следующее: Определите множество файлов, которые всегда необходимо копировать в папку с собранным приложением (в вашем случае здесь будет дополнительная dll'ка и соответствующий ей xml файл). Отведите для этих файлов специальную папку в вашем проекте. Я в своих проектах использую папки с названиями data и static_data. Семантика этих названий следующая - в data хранятся файлы, без которых запуск приложения или тестов невозможен. Это могут быть какие-то входные данные, файлы для тест-кейсов, какие-то unmanaged dll'ки и т.п. В static_data находятся вспомогательные данные, которые просто используются в проекте - например, графические assets, скетчи UI, важная информация в pdf'ках. Далее в Post-Build Events добавьте следующую команду: xcopy "$(SolutionDir)data\*.*" "$(TargetDir)" /S /E /Y Этим вы гарантируете, что в случае успешной сборки проекта все файлы из data будут скопированы в Output папку с собранным приложением. Есть еще один важный момент, на который стоит обратить внимание - если файлы в папке data обновились, то они, естественно, не будут скопированы в Output до пересборки проекта, а значит, в некоторый момент времени, несмотря на то, что вы уже обновили файлы, собранное приложение будет работать со старым комплектом файлов. Это достаточно критично для тестов.

Ответ 2



Нужны просто немного другие команды в макросе. Вот пример из нашего проекта: copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)....\Export\$(TargetName).dll" copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)....\Export\$(TargetName).xml" точно так же можно добавить и pdb

Комментариев нет:

Отправить комментарий