Subversion, внешние ссылки, двоичные файлы и MSBuild / Visual Studio - PullRequest
2 голосов
/ 21 октября 2008

У меня есть проект, который хранится в хранилище 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.

1 Ответ

2 голосов
/ 29 декабря 2008

Как насчет проверки каталога libs на уровне решения , а не проекта? Это то, что мы делаем, поскольку библиотечные сборки обычно используются несколькими проектами; размещение непосредственно в каталоге одного проекта не обеспечило бы большой ресурс общего доступа.

SketchingMode solution
  SketchingMode proj
    bin
      Debug
      Release
  Libs
    SystemHooks
...