Nant: Создание проектов с использованием SVN-Externals - PullRequest
1 голос
/ 13 сентября 2009

Использование Subversion и Nant для сборки. У меня есть основной проект, который зависит от нескольких подпроектов. Подпроекты существуют как отдельные проекты внутри Subversion.

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

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

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

/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

Я добавляю подпроекты, используя свойство svern-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
          ...

1 Ответ

0 голосов
/ 24 сентября 2009

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

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

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

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

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

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

...