svn協同開發下的dll版本管理最佳實踐

 

    做爲一名開發人員,經常碰到的一個問題是,當使用svn簽出一份最新代碼時,常常不能一次編譯經過,致使花費大量時間去解決編譯問題,這裏碰到的問題通常能夠分爲三類:html

1. 因爲提交代碼的開發人員失誤,忘記提交本地更改的文件或少提交,特別是croj或sln項目和新添加的文件,由於新添加的文件在svn下默認是?狀態的,這一點的話,只能靠開發人員本身細心解決;git

2. 因爲引用版本不一致,或版本更新,開發時倆個開發人員的編譯調試,甚至本地測試都不會有問題,可是當須要發佈測試版本或發佈到生產環境時,就會發生版本衝突致使致命bug,也許這個bug仍是一個隱形bug,很難發現或捕獲;github

第二點每每是致命的,由於在敏捷中,提倡的是儘早暴露問題並解決,那麼有沒有一種方法或措施去解決他,或規避這個問題呢?答案顯然是確定的,在這裏,我介紹一下目前我接觸到的倆種版本管理(或者第三方庫的管理方案)。web

 

第一種是使用TortoiseSVN提供的external特性,在這以前先介紹一下,我採起的svn目錄結構,以下api

--trunk  <--開發主幹瀏覽器

      --build <--自動化構建腳本緩存

     --documents <--文檔服務器

     --packages <--nuget包框架

    --references <--引用svn

    --releases <--release版本

    --src <--源碼

    --test <--測試用例

   --XXXXX.sln <-- 解決方案

--branches  <--開發分支

--tags  <--發佈版本

 咱們假設A項目是框架的項目,B項目是業務代碼,B項目須要引用框架項目的dll,那麼,A項目編譯完成後,在releases裏發佈一個1.0.0的版本(最好使用生成事件寫XCOPY腳本,這樣就不會忘記發版本,或手動去拷貝構建的版本),以下圖

那麼,在B項目中,咱們打開reference目錄,右鍵,點擊屬性,打開屬性窗體,按以下操做

 

完成以後,在每次只要更新這個目錄,就能及時得獲取到最新的引用版本,在項目文件中對該dll進行引用,實際上引用的是相對目錄,這樣就解決了由於版本或路徑不一致致使的問題,預防這些人爲的操做,能夠極大的節省咱們的開發時間到實際須要解決的問題上,咱們每次簽出的版本也能保證能夠構建成功,固然,若是大家項目規範的話,最好寫上自動構建腳本,另外就是必定必定必定要使用神器(Jinkens),用上它,大家項目組真的能過上快樂和諧幸福的生活。

 

第二種方法,就是使用微軟公開的Nuget工具,構建本地的nuget服務器,這種方式集成好一些,能夠定義包對包的依賴,這樣的依賴關係就不用使用者再去管理。廢話很少說,先搭建nuget服務器,具體能夠看 https://www.cnblogs.com/lzrabbit/archive/2012/05/01/2477873.html 這位博主介紹得比較詳細。這裏說起到的一點是,在版本升級時,好比開始使用的是某個包的1.0.0版本,後來升級到1.1.0版本,後來1.1.0本身從新上傳了一遍,可是版本號沒有變,須要刪除packages包裏對應的1.1.0的包,最好把本地緩存也清空一下,不然可能仍是會拉去1.1.0的舊版本。操做方式是,打開VS,選擇菜單工具->Nuget 包管理->程序包管理器設置->常規->清空全部Nuget緩存。

下載https://github.com/NuGetPackageExplorer/NuGetPackageExplorer客戶端包管理器並安裝。

1. 打開NuGet Package Explorer

2. 選擇Create a new package

3. 左邊是編輯一些屬性等,右側是添加包文件

4.填入基本信息,其中Id實際上是Name,就是咱們在nuget瀏覽器裏看到的名稱

5.在左側點擊Edit dependencies,可添加外部依賴,在下載使用時,會自動檢測依賴包並下載

6. 在右側右鍵,選擇菜單Add a  Lib Folder,在Lib上右鍵,選擇Add .NET Folder來添加對應框架的版本,而後右鍵選擇咱們須要添加的文件便可

7.完成如下操做後,咱們就能夠點擊最上面的File菜單,選擇Publish,在彈出的窗體,配置剛纔搭建的服務器地址PublishUrl,在下面須要填Publish Key,至關於一個密碼,這個是在服務器裏web.config裏配置的,找到節點<add key="apiKey" value="XXXXXXX"/>,將這個value複製過來便可發佈

 

完成以上操做後,咱們就已經搭建完成了咱們的本地nuget服務器了,若是已經在vs中配置好了本地nuget路徑,那麼咱們就可使用了。

 

以上主要是對dll發佈和引用的管理介紹了我本人在項目中作的最佳實踐,後面會專門寫一篇文章介紹如何搭建Jinkens並使用Jinkens完成自動化構建和部署的(也能夠作自動化測試)。

相關文章
相關標籤/搜索