我有兩個方案:我應該如何從另一個解決方案中引用程序集?
有該公司的框架項目,所有項目我們將使用這個框架。
有一個自定義的框架項目是特定於客戶端,只有公司的一些人需要使用此DLL。
這兩個框架都存儲在TFS分離的解決方案。
應該如何使用其他項目的參考?我應該把這兩個程序集放在GAC上嗎?我應該手動複製輸出組件嗎?建議什麼,爲什麼以及如何使用它?
我有兩個方案:我應該如何從另一個解決方案中引用程序集?
有該公司的框架項目,所有項目我們將使用這個框架。
有一個自定義的框架項目是特定於客戶端,只有公司的一些人需要使用此DLL。
這兩個框架都存儲在TFS分離的解決方案。
應該如何使用其他項目的參考?我應該把這兩個程序集放在GAC上嗎?我應該手動複製輸出組件嗎?建議什麼,爲什麼以及如何使用它?
定製的框架
手動複製輸出組件自定義項目,除非你能包括它的直接源在溶液中。
共享框架
我會用,而不是GAC的NuGet任何時間,因爲你擺脫任何版本問題或者創建一個單獨的安裝包框架(因爲你GAC)
這很容易創建一個私人nuget服務器。只需創建一個新的MVC3項目並安裝一個nuget服務器包:http://docs.nuget.org/docs/creating-packages/hosting-your-own-nuget-feeds
將引用的程序集添加到其他項目的庫文件夾中,並手動更新它。 如果經常更新,請考慮使用您自己的NuGet Feed。
您應該只在需要時將程序集安裝到全局程序集緩存中來共享程序集。作爲一般指導原則,將程序集依賴關係保持爲私有,並在程序目錄中找到程序集,除非明確需要共享程序集。此外,沒有必要將程序集安裝到全局程序集緩存中,以使它們可以通過COM互操作或非託管代碼訪問
由於上述原因,我會將第一個框架ddl放入GAC。
我把第二個框架到在你的TFS通過實例「庫」稱爲設計文件夾來添加從參考(所有團隊必須具有相同的文件夾結構,以避免丟失的引用)
所以#2自定義Framework項目與#1是一樣的,但爲特定客戶端定製?
將自定義框架源代碼作爲正常框架源代碼的一個分支,而不是將其作爲一個實際單獨的解決方案保留是否合理?我想這要取決於差異有多大。
正如我所看到的,使其成爲分支的優勢在於,您應該能夠更輕鬆地合併兩個分支之間的更改。設想一個錯誤修復或一個新功能在#1中完成,並且還需要應用到#2; TFS應該能夠使這更容易,只要TFS知道#2只是#1的一個分支。
無論如何,爲了解決您的問題,我的想法是,您的其他項目應引用這些項目的輸出程序集。
我會將框架程序集複製到其他項目的解決方案文件夾下的文件夾中。我通常稱之爲我的「依賴」,但它並不重要。讓你的項目添加對這些彙編文件的引用。我假設您的自定義框架程序集將具有與常規框架程序集相同的名稱,因此您可以根據需要輕鬆地交換這些文件(或者使用自定義框架創建單獨的項目分支)。
我不鼓勵將程序集放到GAC中,因爲如果忘記從GAC中卸載較舊版本的程序集,在開發過程中很容易將其自動啓動。
聽起來我經典的項目引用vs二進制參考決策制定。離開這個GAC。
在拓撲我們使用這樣的事情就像你的要求:
|___$/3rdParty/ | |__BaseFramework.dll | |__CustomFramework.dll | |__log4net.dll | |__WPFToolkit.dll | |___$/Sources/ProjectName/NormalProject.sln | | | |__[Binary Reference] "../../3rdParty/BaseFramework.dll" | |__[Project Reference] | |__[Project Reference] | |___$/Sources/Common/BaseFramework.sln | | | |__[Project Reference] | |__[Project Reference] | |__[Project Reference] | |__[Project Reference] | |___$/Sources/Custom/Acme/AcmeProject.sln | | | |__[Binary Reference] "../../../3rd-party/CustomFramework.dll" | |__[Project Reference] | |__[Project Reference] | |___$/Sources/Custom/CustomFramework.sln | |__[Project Reference] |__[Project Reference] |__[Project Reference] |__[Project Reference]
雖然這可能是沒有價值你的情況,如果你使用Subversion的svn:externals的將是一個相當簡單的解決方案這個情況。 – Candide 2012-03-05 14:26:02