在項目中使用開源庫(例如SharpPcap或FakeItEasy)時,我們應該將源代碼添加到解決方案中,還是針對DLL進行編譯並將它們放入解決方案中的目錄中?使用開源庫時,我們應該針對源代碼還是二進制文件進行編譯?
回答
我想既不。
以下是原因不不把源代碼:
- 開發人員可能修改代碼不慎
- 庫通常如有更改
而且有2個原因DO包含解決方案的DLL:
- 使部署更容易
- 降低使用庫的不兼容版本
- 減少丟失的參照
所以,機會如何的可能性有多大?
添加一個新的
Class Library
項目一個獨特的名字,說ClassLibrary1
,在Build Events
頁的解決方案在
Build
頁面的項目設置,配置Output path
應用輸出路徑,請將以下行添加到
Post-build event command line
塊中:del "$(TargetPath)"
外部DLL複製到它的文件夾,並把它們添加到
ClassLibrary1
設置
Copy Local
引用到所有的true
添加引用設置其他項目,它的
Project Dependancies
,檢查ClassLibrary1
加參考其他項目,從DLL中放入的路徑
ClassLibrary1
設置在其他項目中的所有這些附加的DLL
Copy Local
到false
因此,項目ClassLibrary1
您的解決方案的外部庫的中央控制。每當您Rebuild Solution
,ClassLibrary1
將添加到其References
的最新DLL複製到應用程序輸出文件夾,並刪除它生成的名爲ClassLibrary1.DLL
的DLL本身。而且,在編譯時或運行時應用程序都會使用相同版本的DLL,因此每次釋放應用程序時都不需要額外部署或檢查每個部署。
我想說的是,如果您在最新版本中獲得它,則可能會使用所提供的二進制文件,因爲源代碼可能不穩定。但是如果他們提供版本化的二進制文件,那麼他們很可能已經過測試並且很穩定。
這也取決於您是否剛開箱即用或是否要修改它。
二進制文件:
- 更穩定,除非你是銘記拉源
- 容易的發佈版本的
來源:
- 可以修改
- 可以調試通過直接進入源代碼來使用API
最後一點往往是重要的,所以要準備下載並在你的IDE打開源,即使你開始時只有二進制文件,特別是如果你正在使用的庫是年輕或虐待測試。
通常我會針對二進制文件進行編譯。我在我的解決方案上有一個文件夾供應商/庫,或者我只使用NuGet,並編譯Againest Dll。
但是,有時我需要調試開源庫,當某些事情沒有按預期發生時。就在那時,我將鏈接到源代碼(僅用於調試)。
在生產時,我使用二進制文件,因爲代碼已經過很好的測試。
您應該使用二進制文件進行編譯。
原因很簡單:您的項目和第三方庫是不同的項目,並且在您自己的構建過程中編譯他人的庫可能會引入不必要的複雜性和項目依賴性。
某些庫要求您在環境中安裝一些工具和插件。
代替包括在構建過程的開放源代碼,通常我有一個依賴性或與二進制文件和源代碼都在Visual Studio溶液的根LIB目錄。當我想調試第三方代碼時,我只需打開另一個Visual Studio實例,然後將調試器附加到整個過程中。
認爲一些第三方開源庫很胖,也許你自己的代碼庫很小:因爲你添加了很多源代碼,你的構建過程會延遲很多,因爲你只是添加了無用的東西(代碼,插件....)。
我更喜歡將構建過程委託給庫的作者的原則,在我的情況下,我認爲自己是這樣的庫的使用者:我不需要每次重新編譯它。
啊,如果你打算修改源代碼,最好的做法應該是聯繫作者併發送給他/她補丁,以便他/她可以將其包含在官方發行版中。如果沒有,你知道:每次筆者發佈一個新版本,你必須合併與自己的變化,新的源代碼的額外工作...
奧卡姆的剃鬚刀說,如果你不需要修改庫,你應該使用二進制文件。
- 1. 對於二進制文件,我應該使用bfiles還是bigfiles?
- 2. JVM編譯類文件到彙編源代碼或二進制代碼
- 3. gdb:使用-g編譯的二進制文件與使用-g編譯的二進制編譯的代碼
- 4. 從源代碼編譯時2.0播放二進制文件在哪裏?
- 5. Perforce:如何在編譯源代碼時自動檢出二進制文件
- 6. 源代碼,二進制,列表,續行
- 7. 使用vs2008編譯的源代碼產生的二進制文件不同於源代碼在csc中直接編譯的源代碼
- 8. Cuda Source使用Rose編譯器進行源代碼翻譯
- 9. BrowserStackLocal:從源代碼運行BrowserStackLocal二進制文件
- 10. 編譯二進制文件
- 11. 使用VexCL「編譯二進制文件」
- 12. 是否將C#代碼編譯爲本機二進制文件?
- 13. 使用資源文件進行C++編譯時出錯
- 14. 嵌入二進制源代碼
- 15. django二進制(無源代碼)部署
- 16. 我應該從源代碼編譯一個庫嗎?
- 17. 如何將資源編譯成Haskell中的二進制文件?
- 18. 如何將資源編譯到二進制文件中?
- 19. 我們應該開源嗎?
- 20. 網站源代碼控制和大設置二進制文件
- 21. php的二進制代碼(編譯php)
- 22. 針對Windows x64的預編譯的SQLite二進制文件
- 23. 我該如何使用OpenCV源代碼進行調試
- 24. 可以對jar文件進行反編譯以獲取原始源代碼?
- 25. 應開放源代碼庫進行數字簽名
- 26. 對開源項目的二進制文件簽名
- 27. 我應該使用Xamarin還是QT進行移動開發?
- 28. 將源代碼和二進制文件目錄傳遞給Sonar
- 29. 二進制文件源代碼管理系統
- 30. 更新TFS源代碼管理中的二進制文件
如果您不打算更改庫源代碼,請直接使用該DLL。 – 2013-02-24 11:17:17