2009-08-13 3 views
2

Я использую подрывную деятельность и NAnt (и Visual Studio IDE)Nant: Как структурировать SVN: внешние для построения библиотек классов, которые ссылаются на третьем участник библиотеки

Я следующий предложенную структуру проекта в http://blog.jpboodhoo.com/NAntStarterSeries.aspx, который выступает автономные каталоги subversion, где разработчик может выполнить проверку и сразу же построить проект за один шаг.

структура Мой репо как:

/Repo 
    /MainProject 
    /trunk 
     /doc <-- documentation 
     /lib <-- binary-only DLLs 
     /src <-- source code for MainProject 
     /tools <-- holds tools like nant, nunit, etc 
... 
    /ClassLibrary1 
    /trunk 
     /doc 
     /lib 
     /src 
     /tools 
... 
    /ClassLibrary2 
    /trunk 
     /doc 
     /lib 
     /src 
     /tools 

Что не ясно, каким образом структурировать проект, который имеет класс библиотеки, которые в свою очередь, ссылки библиотеки DLL третья сторона и сами.

В настоящее время у меня есть главный проект с рабочей директорией как

Пример:

/MainProject 
    /build 
    /lib 
    /src 
    /MainProject 
    /ClassLibrary1 <-- svn external to svn://server/repo/ClassLibrary1/trunk/src 
    /ClassLibrary2 <-- svn external to svn://server/repo/ClassLibrary2/trunk/src 
    /tools 
    ... 

При создании MainProject, я компилировать библиотеки классов и вывод библиотеки DLL в папку сборки. Однако сами библиотеки классов имеют сторонние библиотеки DLL с двоичными именами, которые они ссылаются.

Мои вопросы, чтобы построить MainProject Мне нужно каким-то образом получить сторонние DLL из библиотек классов в вывод сборки. Как мне это сделать?

Мысли: 1. Должен ли я хранить копии этих сторонних библиотек DLL в папке с библиотекой MainProject? 2. Или должна ли моя svn: внешняя ссылка быть в trunk проекта библиотеки классов, а не в src, чтобы я мог получить доступ к папке lib библиотеки классов? 3. Должен ли я использовать функцию subversion 1.6 для svn: externals для отдельных файлов?

ответ

1

Лично я привожу в багажник библиотек, на которые вы указали ссылки. (На самом деле, я ввожу корень тега, но это не так).

Если вы сохраняете отдельную копию требуемой библиотеки dll, то вы действительно не позволяете библиотеке ссылок определять, что ей нужно для себя, потому что вся эта логика дублируется в проекте. То же самое происходит, если вы используете несколько внешних ссылок или внешних файлов для ввода кода и DLL.

Мой принцип заключается в том, что библиотека знает, что ей нужно, одна внешняя ссылка на библиотеку может получить эту библиотеку и все, что ей нужно.

Таким образом, если вы измените ссылки на библиотеку, вы можете быть уверены, что все и все проекты просто подберут это. (если среда IDE не поддерживает это, это проблема IDE, а не субверсия). Вы также можете быть уверены в проекте, что если вы измените версию библиотеки, на которую вы указываете, вы также автоматически получите правильные ссылки, и вам не нужно будет отлаживать ошибки сборки, чтобы решить, что пошло не так ,

+0

«Если вы сохраняете отдельную копию требуемой библиотеки dll, то вы действительно не разрешаете ссылочную библиотеку определить, что ему нужно для себя » Это имеет смысл. Я полагаю, что мое сопротивление этому проверяет «дополнительные» папки библиотеки. Тем более, что я храню инструменты в Библиотеке. Если Main Project ссылается на 10 библиотек классов, то у меня будет 10 копий nant, скрипты библиотек и т. Д. Но, может быть, это пример беспокойства о дискового пространства, когда нет необходимости? – User

+0

Чем больше я думаю об этом, тем более ясным представляется приведение в багажнике библиотеки как svn: external. Я просто хотел получить отзывы о том, как это делают другие. – User

+0

Я поместил свойство svn: externals, чтобы захватить библиотеки классов в папке src MainProject. Это имело общий смысл, когда я хватал только каталог trunk/src библиотек классов. Однако, если я переключусь на захват ствола библиотеки классов, мне интересно, все-таки имеет смысл вытащить это в каталог src. В какую директорию вы помещаете свойство externals? – User

1
  1. Должен ли я хранить копии этих 3-сторонних библиотек DLL в папке Lib MainProject в? Я предпочитаю хранить любые внешние библиотеки в каталоге двоичных файлов под туловищем, но рядом с источником ... или называть его ссылками, зависимостями и т. Д. Затем это позволяет любому разработчику получать последние данные, и все, что вам нужно, сгорит. Это не обязательно должно быть частью проекта как такового. Он просто должен быть доступен, когда выполняется сборка.

  2. Или должна ли моя svn: внешняя ссылка быть в trunk проекта библиотеки классов, а не в src, чтобы я мог получить доступ к папке lib библиотеки классов? Я не предпочитаю этот подход, так как он заставляет процесс запуска и запуска нового разработчика более запутанным. Я думаю, что сборка может войти в свой собственный репозиторий, когда он имеет уровень важности для себя. Но я никогда не буду ссылаться на его результаты. Он должен иметь процесс сборки, обернутый вокруг него, который продвигает механизм «развертывания» вывода в вышеупомянутый каталог ссылок или зависимостей. Однако автоматизация такого развертывания может быть сопряжена с проблемами. Было бы лучше, если бы на собрании был свой собственный процесс. И когда была выпущена новая версия сборки, она была бы объявлена ​​разработчиком в проекте, который в ней нуждался. Затем они могут проверить это, принять его и поместить в свой процесс сборки. Очевидно, что если эта сборка меняется ежедневно, может потребоваться автоматизация.

  3. Должен ли я использовать функцию subversion 1.6 svn: externals для отдельных файлов? Нет. Я предпочитаю сохранить проект/решение как автономный объект. Распространение школьных материалов на все места делает зависимости более болезненными. Держите силосы как можно тяжелее ... приведите новые вещи как можно более ручными ...или как руководство, так как частота, которую меняют вещи, позволит.

+0

я думаю суть вопроса является проект библиотеки классов имеет ссылку на 3-й партии библиотеки DLL , Эта DLL хранится в папке lib библиотеки классов (которая является папкой, предназначенной для хранения DLL сторонних двоичных файлов) в ClassLibrary1/trunk/lib. Однако MainProject должен как-то ссылаться на стороннюю DLL для своей сборки. Как мне это сделать? – User

+0

Так что мой вопрос в этом. Вы говорите, что библиотека классов зависит от этого стороннего виджета и хранит его в папке lib для этого проекта. И проблема в том, что ваш проект также зависит от этого стороннего виджета ... почему бы не сохранить его в локальной папке lib? –

+0

Вы имеете в виду локальную папку lib для основного проекта или локальной папки lib для проекта библиотеки классов? Если вы имеете в виду последний, то мне нужно иметь svn: externals в багажнике библиотеки классов (это мой вопрос № 2 выше) Не то, чтобы основной проект имел прямую зависимость от виджета, это то, что проект зависимость от библиотеки классов. В свою очередь библиотека классов имеет свои собственные зависимости (т. Е. Библиотека классов не будет работать без доступа к сторонней DLL). – User