簡體   English   中英

南特:使用svn-externals構建項目

[英]Nant: Building projects using svn-externals

使用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

我正在使用subversion 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
          ...

您的問題的答案當然是“取決於”。

您不說的是如何引用解決方案中的“子項目”,或者它們是否被其他解決方案(主項目)使用? 他們是項目參考嗎? 如果是這樣,請讓nant調用MSBuild來構建解決方案。 這將基於這些依賴關系構建所有子項目。 我只能假設這是您的設置方式。

就我個人而言,如果我有一個看起來像您的設置,則我不會使用項目引用,也不會使用每個項目的所有代碼的外部組件。 我對待這些子項目的方式與對待第三方DLL的方式相同。

如果執行此操作,則將使用DLL引用。 這樣可以將子項目與您的主項目分離。 這就是我要走的路,特別是如果那些子項目被其他項目引用。

是的,現在您必須做出其他決定……例如如何將其存儲在源代碼管理中。 您可以在lib文件夾中包含外部組件...,也可以僅將DLL的副本放入您的lib文件夾中。 這也取決於您要如何控制版本控制。

此外,如果您使用某種類型的CI(例如CC.Net),也不會提及。 如果您這樣做,則如果修改了任何子項目,它都可以觸發主項目的重建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM