2009-09-13 2 views
1

Использование подрывной деятельности и Нанта для строительства. У меня есть основной проект, который зависит от нескольких подпроектов. Суб-проекты существуют как отдельные проекты внутри подрывной деятельности.Нант: строительные проекты с использованием svn-externals

Мой вопрос: Должен ли скрипт nant build в основном проекте создавать все связанные проекты и сам по себе? Или подпроекты знают, как строить себя, и я как-то называю файлы сборки подпроектов из основного файла сборки и каким-то образом собираю весь вывод в основной сбор данных проекта?

В настоящее время у меня есть файл сборки mainproject, который создает все подпроекты. То есть, у меня есть определенные цели для каждого подпроекта в файле сборки. Однако это создает плотную связь между основным файлом сборки и подпроектами. Было бы неплохо, если бы я мог просто сказать, что «подпроекты знают, как строить себя», и попросить их построить себя из основного проекта и собрать выход.

Для справки, мой репозиторий выглядит следующим образом:

/Repo 
    /MainProject 
    /trunk 
     /doc <-- documentation 
     /lib <-- binary-only DLLs (usually 3rd party) 
     /src <-- source code for MainProject 
     /svn-externals <-- hold references to other projects in repository 
... 
    /ClassLib1 
    /trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 
... 
    /ClassLib2 
    /trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 
... 
    /ClassLibCommon 
    /trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 

Я потянув в суб-проектов с использованием подрывной СВН-внешние свойства. Поэтому моя рабочая копия такова:

/MainProject 
    /build 
    /doc 
    /lib 
    /src 
    /MainProject 
    /svn-externals 
    /ClassLib1 <-- svn external to svn://xyz/repo/ClassLib1/trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 
     /ClassLibCommon <- svn external to svn://xyz/repo/ClassLibCommon/trunk 
      ... 
    /ClassLib2 <-- svn external to svn://xyz/repo/ClassLib2/trunk 
     /doc 
     /lib 
     /src 
     /svn-externals 
     /ClassLibCommon <- svn external to svn://xyz/repo/ClassLibCommon/trunk 
      ... 

ответ

0

Ответ на ваш вопрос, конечно, «это зависит».

Что вы не говорите, так это то, как вы ссылаетесь на «подпроекты» в своем решении или если они используются другими решениями (главными проектами)? Являются ли они проектной ссылкой? Если это так, позвоните MSBuild, чтобы построить решение. Это построит все подпроекты на основе этих зависимостей. Я могу только предположить, что так оно и было.

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

Если вы сделали это, вы использовали бы ссылки на DLL. Это отделяет суб-объекты от вашего основного проекта. Так я поеду, особенно если на эти подпроекты ссылаются другие проекты.

Да, теперь вам нужно принять некоторые другие решения ... например, как хранить их в контроле источника. У вас могут быть внешние в вашей папке lib ... или вы можете просто поместить копию DLL в свою папку lib. Это также зависит от того, как вы хотите контролировать управление версиями.

Кроме того, вы не упомянули, используете ли вы какой-либо тип CI, такой как CC.Net. Если бы вы это сделали, вы могли бы заставить его перестроить основной проект, если какой-либо из подпроектов будет изменен.

+0

Библиотечные проекты используются другими «главными» проектами. Это ссылки на проекты. Две вещи: 1. Библиотеки часто меняются. 2. Я думал, что обычная мудрость не хранит двоичные файлы для вещей, для которых у вас есть исходный код. – User

+0

Всё зависит. Мне не ссылаются на проект в более чем одном решении по поводу поездок. Я считаю, что общие библиотеки не являются частью основного проекта. Таким образом, точно так же, как включение DLL-файлов Crystal Report в svn, я также размещаю свои внутренние библиотеки DLL. Кроме того, ссылки DLL дают вам больше контроля над версией той библиотеки, которую вы используете с каждым проектом. Конечно, вы можете сделать выше, а не поместить двоичные файлы в svn. Поместите их на сетевой ресурс. – PilotBob

+0

«Мне не ссылаться на проект в более чем одном решении, переопределяет это:« Я не уверен, что понимаю это.Чтобы уточнить, когда я использую термин «проект», я имею в виду это в общем смысле не в смысле визуальной студии. На мой взгляд, по определению, «проект» библиотеки классов (фактически это собственное решение) предназначен для использования в более чем одном решении. – User