2009-08-13 48 views
2

我使用的顛覆和惡性(和Visual Studio IDE)南特:如何構建SVN:外部組件的引用第三方DLL的

我已經按照推薦的項目結構在http://blog.jpboodhoo.com/NAntStarterSeries.aspx主張建設類庫自包含的顛覆目錄,開發人員可以在其中完成結賬並立即在單個步驟中構建項目。

我的回購協議的結構是這樣的:

/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來build文件夾。但是,類庫本身具有它們引用的第三方二進制DLL。

我的問題是爲了構建MainProject我必須以某種方式從類庫中獲取第三方DLL到構建輸出中。我怎麼做?

想法: 1.我應該將這些第三方dll的副本存儲在MainProject的lib文件夾中嗎? 2.或者我的svn:external引用應該是類庫項目的主幹而不是src,以便我可以訪問類庫的lib文件夾? 3.我應該使用svn:externals的subversion 1.6功能到單個文件嗎?

回答

1

就我個人而言,我引入了引用庫的主幹。 (實際上,我帶了一個標籤的根,但那不是重點)。

如果您保留所需dll的單獨副本,那麼您並不真的讓引用的庫確定它自己需要什麼,因爲所有的邏輯都在項目中重複。如果使用多個外部引用或文件外部引入代碼和dll,則會發生同樣的情況。

我的原則是這樣的 - 圖書館知道它需要什麼,對圖書館的一個外部引用可以獲得圖書館及其所需的一切。

這樣,如果你改變了圖書館的參考資料,你可以確信任何和所有的項目都會選擇它。 (如果IDE不支持這個,這是IDE的問題,而不是subverion的)。你也可以自信地作爲一個項目,如果你改變了你指向的庫的版本,你也會自動獲得正確的引用,並且不需要去調試構建失敗來找出出錯的地方。

+0

「如果你保留一個單獨的副本所需的DLL,那麼你是不是真的允許引用的庫以確定它自己需要什麼「 這是有道理的。我想我的抵制是檢查圖書館的「額外」文件夾。特別是因爲我把這些工具放在圖書館裏。如果主項目引用了10個類庫,那麼我將有10個副本,庫創建腳本等。但是,當沒有必要時,這可能是一個擔心磁盤空間的實例嗎? – User 2009-08-14 16:25:03

+0

我考慮得越多,將圖書館的主幹帶入svn:外部似乎是最明智的解決方案。我只是想要別人怎麼做的反饋。 – User 2009-08-14 23:38:27

+0

我已經把我的svn:externals屬性抓到MainProject的src文件夾上的類庫。當我抓取Class Libraries的trunk/src目錄時,這是完全有意義的。但是,如果我切換到抓取類庫的主幹,我想知道是否將它拉入src目錄是有意義的。你把外部屬性放在哪個目錄? – User 2009-08-16 23:53:45

1
  1. 我應該將這些第三方dll的副本存儲在MainProject的lib文件夾中嗎?我更喜歡將任何外部庫存儲在trunk中的二進制文件目錄下,但在源代碼旁邊或將其稱爲引用,依賴關係等。這樣,任何開發人員都可以獲得最新的所需內容。它並不需要成爲項目本身的一部分。它只需在構建執行時可訪問。

  2. 或者我的svn:external reference應該是類庫項目的主幹而不是src,以便我可以訪問類庫的lib文件夾?我不喜歡這種方法,因爲它使得新開發人員的工作變得更加複雜。我認爲大會在對自身具有重要意義時可以進入自己的存儲庫。但我永遠不會參考它的輸出。它應該包含一個構建過程,以促進將輸出「部署」到上述引用或依賴關係目錄的機制。然而,像這樣自動化部署可能充滿了問題。如果程序集圍繞它自己的過程會更好。當新版本的程序集發佈後,它將被項目開發人員手動接受並需要它。然後,他們可以測試它,接受它,並將其放入構建過程中。很明顯,如果該裝配每天發生變化,可能需要一些自動化。

  3. 我應該使用svn:externals的subversion 1.6功能到單個文件嗎?不。我寧願將項目/解決方案作爲一個獨立實體。讓所有的地方都有臨時分支會使依賴更加痛苦。儘可能保持筒倉...儘可能手動帶來新的東西...或者按照事物變化允許的頻率手動操作。

+0

我想問題的關鍵是類庫項目有一個第三方DLL的引用。該DLL存儲在ClassLibrary1/trunk/lib下的類庫的lib文件夾(這是指定用於存放第三方二進制DLL的文件夾)。 但是,MainProject需要以某種方式引用該第三方DLL的構建。我怎麼做? – User 2009-08-13 22:39:52

+0

所以我的問題是這樣的。您說類庫依賴於這個第三方小部件,並將其存儲在該項目的lib文件夾中。問題是你的項目也依賴於這個第三方小部件...爲什麼不把它存儲在本地lib文件夾呢? – 2009-08-14 00:43:58

+0

你的意思是一個本地lib文件夾的主項目或本地庫文件夾的類庫項目?如果你的意思是後者,那麼我需要將svn:externals添加到類庫的主幹(這是我上面的問題#2) 這不是說主項目直接依賴於這個小部件,而是項目具有依賴於類庫。類庫反過來有自己的依賴關係(即,類庫不會沒有訪問第三方DLL的功能) – User 2009-08-14 16:34:38

相關問題