Subversion, внешние ссылки, двоичные файлы и MSBuild / Visual Studio
-
03-07-2019 - |
Вопрос
У меня есть проект, который хранится в хранилище Subversion.
В этом хранилище, в другой папке, у меня есть набор библиотек, которые я использую во многих своих проектах. Эти библиотеки хранятся в виде двоичных файлов, т.е. библиотеки DLL, PDF и XML.
Вот пример макета:
<repo-url>
\Libraries
\SQLite
\SystemHooks
\Moq
В проекте приложения я добавляю " libs " затем добавьте свойство ссылки svn: externals в этот каталог, чтобы получить нужные мне библиотеки.
Например, для этого проекта, над которым я сейчас работаю, и который вызвал этот вопрос, мне нужна библиотека SystemHooks, поэтому в структуре папок проекта моего приложения она теперь выглядит следующим образом:
SketchingMode <-- solution folder, other projects here as well
SketchingMode <-- app project folder
libs
SystemHooks
Приятно то, что я могу легче обновлять библиотеки и просто использовать спецификатор -rXYZ для определения externals, чтобы избежать добавления более новых версий, чем я готов принять, и при этом иметь только одну копию каждый файл / версия в моем хранилище.
Плохая вещь, в данном конкретном случае, заключается в том, что один из DLL в каталоге SystemHooks (2, если я тоже хочу pdb) должен быть скопирован в выходной каталог, на который не ссылается проект.
Ссылки работают как обычно, но как только я помечаю один из файлов в этом каталоге как " Содержимое " и " Копировать всегда " или " Копировать, если новее " ;, то структура каталогов libs и SystemHooks также копируется в выходной каталог.
Таким образом, после сборки моя структура каталогов на диске выглядит следующим образом:
SketchingMode <-- solution folder, other projects here as well
SketchingMode <-- app project folder
libs
SystemHooks
bin
Debug <-- main build output here
libs
SystemHooks <-- 1-2 files in here
Единственный способ избежать этого - использовать шаги после сборки и просто добавить необходимые операторы копирования? Или я могу каким-то образом настроить файл проекта, чтобы избежать копирования всей структуры таким образом?
Просто чтобы прояснить, в каталоге bin \ Debug я не хочу, чтобы там был еще один слой libs \ SystemHooks, и все файлы, которые в настоящее время копируются в папку bin \ Debug \ libs \ SystemHooks, должны быть вместо этого скопировать в папку bin \ Debug.
Решение
Как насчет проверки каталога libs на уровне решения , а не проекта? Это то, что мы делаем, поскольку библиотечные сборки обычно используются несколькими проектами; прямое размещение внутри одного каталога проекта не обеспечило бы большой ресурс общего доступа.
SketchingMode solution
SketchingMode proj
bin
Debug
Release
Libs
SystemHooks