2009-07-24 70 views
3

我創建了一個從Visual Studio運行的開源項目。但它依靠一些外部圖書館的工作。這些庫也是開源的。我想知道的問題是,如果我應該我應該如何將外部庫包含在開源項目中?

  1. 爲用戶提供這些庫,並讓他們下載源代碼,然後將它們
  2. 點用戶添加到項目中的dll,並讓他們直接引用它
  3. 直接包含該dll到項目
  4. 包括這些庫的源代碼,直接進入項目

這是最好的辦法或這樣的標準呢?

+0

感謝所有回答。基本上,答案几乎相同,我只會選擇最快的回答者。 – sean 2009-07-27 06:00:17

回答

3

有一些指導原則不是開源的,但我認爲它們適用。

我總是在源代碼控制中包含所有外部庫的二進制文件(System.dll等標準文件除外)。這樣,簽出源代碼的人可以立即構建項目。此外,我可以輕鬆切換到較舊版本的項目,並立即在用於構建該版本的版本中具有依賴關係 - 這在調試較舊版本的軟件時特別有用。

1

我見過的大多數項目都包含ThirdParty文件夾(或類似的東西)與項目中的dll文件,並且項目引用這些文件。這確保每個人都有相同的版本,並且不需要更改引用。

如果在版本控制中,它也使得如果您需要切換回早期版本,它也更容易進行調試。

1

(1)對於下載項目源代碼的用戶來說很好,假設依賴關係列表不會失控並且很容易獲取。 (2)基本上與(1)相同,只要您指的是其他人構建的二進制文件即可。我不會在您自己的軟件包之外構建和分發dll。

(3)對於二進制發行版,我會做到這一點,包括每一個依賴性,所以我的軟件運行「開箱即用」

(4)除非你需要到餐桌的其他庫不要這樣做由於某種原因(希望這種情況不會發生)

編輯:對於您自己的源代碼管理,請做任何最簡單的操作。我的建議只針對您的發行版(源代碼和二進制文件)。將源代碼放在第三方庫中並不少見,或者只是放入頭文件和二進制庫 - 無論哪種方式最適合您的情況。

0

我想說這取決於圖書館的大小,可用性和波動性。

它們越大,包含它們的越少,並且越想指向它們。

您的用戶在獲取它們時可能遇到的問題越多,您希望包含的問題就越多。 Sourceforge上的某些內容可能會停留在那裏,但Joe的個人網站上的某些內容可能不會。

如果圖書館可能會改變導致問題,你想在你的項目中包括一個版本。

如果圖書館可能改變以改善某些事物而不會破壞事物,那麼您希望指向它們。

至少,您應該提供DLL,除非它們太大,並用該版本標記它們。

另外,檢查許可證。特別是在像GPL這樣的版權許可下,您可能有義務確保所有內容的來源都可用。

+0

你是什麼意思標記他們的版本?指定他們應該使用的版本? – sean 2009-07-24 16:51:26

0

您可以根據自己的喜好簡單或複雜。作爲用戶,我更喜歡將所有庫都包含在產品的可下載發行版中。這對於那些只想用最少的大量工具就可以使用你的項目的人來說,儘可能簡單。下載外部庫對於用戶來說確實很難(特別是在.Net世界中),並且給它們一個已知的良好的依賴關係可以是一個真正的幫助。

0

你應該給他們至少有兩個選項:

  • 二進制下載,所有可執行文件和庫(無源)
  • 完整的源代碼爲您自己的代碼(MO外部庫源)

除非您修改了外部庫,否則您不應提供外部庫的源代碼,在這種情況下,您必須這樣做。提供libarary源只是增加了你可以獲得源代碼的不同位置,並且增加了你對於什麼版本的困惑。

當然,您應該提供指向圖書館主頁的鏈接。如果您使用GPL進行發佈,則還必須準備好自己直接提供圖書館資源。

相關問題