2010-10-19 23 views
32

我們正在使用TFS和VS 2010.幫助TFS和被引用的DLL

我一直在使用TFS作爲源代碼控制的項目。 我有很多dll,我已經下載(如log4net),並在我的項目中引用。

當一個新的程序員連接到TFS並且讓我的項目脫離了源代碼控制時,它無法構建,因爲它說它缺少所有這些引用的dll。

我在這裏做錯了什麼?我如何在源代碼管理中包含那些被引用的DLL。 在引用它們之前,我是否需要將所有這些dll添加到我的項目中?當我引用它們時,我只是瀏覽了它們在我的文件系統上的位置。

謝謝!

回答

45

我發現第三方DLL的最佳做法是在sln/proj文件結構中創建一個「庫」文件夾,並將所有必需的DLL複製到本地文件夾以供參考。您還需要確保將這些DLL檢入源代碼管理。這樣,在項目上工作的每個人都可以獲得完全相同的所有DLL版本,並且參考路徑完全相同。

在任意下載或安裝位置引用第三方庫會有問題,因爲它將要求所有開發人員爲所有DLL維護相同的下載結構。另外,如果每個人都引用項目結構之外的DLL,則很難保證每個人都在同一個版本上。

另一種選擇是讓每個人都將DLL安裝到GAC中,但這也可能是一個真正的痛苦,尤其是在版本管理和部署方面。

+2

這有額外的好處,任何開發人員(新的或其他)可以只是得到最新的,擊中F5,並開始運行沒有「我在哪裏得到DLL X或如何安裝DLL Y」 – 2010-10-19 20:01:12

+0

我創建了'sln'中的庫文件夾,我必須添加所有引用,因爲我從server.Am得到項目。我錯誤的方式嗎? – Mohsen 2012-09-23 05:07:35

+0

而不是庫文件夾..更好地在解決方案級別管理NuGet包管理器。我同意上述解決方案,以防這些第三方dll通過nuget無法使用。 – 2014-06-23 11:28:33

1

我已經嘗試了各種方法來處理這個問題,並已決定放棄在bin文件夾中所需的dll,並確保它們包含在源代碼管理項目中。我聽到有人說這可能不是一個好主意,但沒有人爲此提供了很好的推理,這對我來說很合適。

我的第二選擇是在網絡共享上劃出一些空間並組織第三方的各種dll。只要每個人都使用正常的網絡路徑作爲參考,您可以將文件放在具有版本號的文件夾中,以保持事情的順利,並且每個人都可以訪問他們需要的所有內容。

在項目中添加一個單獨的文件夾也是可行的,但看起來很亂,因爲你最終會得到你不想包含在你的發佈中的額外文件。

2

安迪的建議是一個很好的建議,我過去曾經使用過。在我目前的工作中,我們有一個網絡共享上的「參考」文件夾供我們所有人使用。我們在這裏擁有非常快速的網絡,儘管所有開發人員都在一個辦公室。如果您有很多遠程開發人員或網絡速度較慢,此解決方案將無法正常工作。

7

我在我的項目文件夾中創建了一個「ThirdPartyDLL」文件夾,我在其中複製了所有額外的DLL。然後,我進入了源代碼資源管理器,並將這些DLL添加到團隊基礎服務器中,這樣我就可以確定我爲我的應用程序的特定版本使用了正確版本的DLLS(所以其他人與我在同一頁面上)。

視圖 - 其他窗口 - 源coontrol探險 右鍵單擊項目文件夾 - 將項目添加到文件夾

你將無法選擇與它的DLL的特定文件夾,而是可以選擇單個DLL文件夾內的文件。然後您會看到該窗口中出現「ThirdPartyDLL」文件夾。

完成此操作後,這些dll將在團隊基礎源代碼控制中。每當開發人員檢入時,他們將獲得最新版本的DLL。

不要忘記刪除應用程序中的舊引用,並將它們更改爲您的thirdpartydll文件夾。

我曾經將DLL複製到bin文件夾中,但遇到的問題是當DLL升級時。最初,當我的項目很小時,這不是什麼大問題。現在我有多個DLL和我創建的應用程序變得非常難以在我的項目之外維護一致的DLL版本。我最好的例子是我購買的授權DLL。當升級所有的應用程序和庫需要在同一個版本上。如果我忘記了一個,那麼我有奇怪的問題或應用程序停止工作。現在,我已將所有內容都放在一個文件夾中,我只需進行一次更改即可升級所有內容。

希望這會有所幫助。