1. 程式人生 > >VS中bin和obj檔案引發的問題

VS中bin和obj檔案引發的問題

   在敲機房收費系統的時候通常都會遇到這個問題:“未能載入檔案或程式集“DAL”或它的某一個依賴項。系統找不到指定的檔案”。

    解決方案: 

    修改將DAL的輸出目錄 修改到UI/bin/Debug 。

一、引用路徑問題: 

    DAL的預設輸出目錄是在DAL/bin/Debug 目錄之下,為什麼要修改它的輸出目錄呢?在說到這個問題上的時候,我們還得先來了解一下什麼是引用關係。 

 

    在傳統的三層中,引用關係:UI—>BLL—>DAL ,引用也就是相當於是自己的。例如UI層引用了BLL層,那麼UI層對於BLL層中公有的東就都可以隨便用,所以在生成目錄的時候,BLL層生產的Dll檔案就應該是包含在UI層中。同理,DAL層通過引用也包含在UI層中。

    由上面的圖我們可以看出,UI層並沒有間接的引用DAL層,所以在生成程式集的時候,UI層的bin檔案目錄下並不存在DAL的程式集。

二、 bin目錄 & obj 目錄

    總的來說:Bin是放最終程式碼的檔案,Obj是放中間程式碼(臨時)的檔案 。

1.bin目錄存放最終編譯的結果,它是二進位制binary的英文縮寫。  

     Bin 是預設情況下的輸出檔案目錄,也就是你工程編譯的結果(dll或者exe),也包括其他你設定了需要輸出的檔案,比如:配置,資原始檔等內容。 

    Bin檔案有兩個版本Debug和Release兩個版本,分別對應的資料夾為bin/Debug 和bin/Release,這個資料夾是預設的輸出路徑,我們可以通過專案屬性—>編譯—>生成輸出路徑進行修改。 

2.obj 目錄是用來存放編譯過程中生成的臨時檔案,它是Object的英文縮寫。

    obj目錄是用來儲存每個模組編譯的結果,在.Net中,編譯是分模組進行的,編譯整個完成會合併為一個.DLL或EXE儲存到bin目錄下。

    在新增引用時,.NET會記錄新增的引用絕對路徑,這些設定儲存在“每使用者”檔案中,(Solution.csproj.user),可以通過記事本開啟檢視。也可以在:專案屬性—>通用屬性—>引用路徑裡面檢視。如果設定複製到本地為true,在生成專案時會自動拷貝該DLL到專案生成資料夾中(bin目錄),否則不會拷貝。在生成專案時,對所新增的引用的是絕對路徑,而在執行時程式集預設只在當前所在的路徑下去找。要修改引用的路徑,必須通過程式設計的方法去實現。使用References 物件。

    obj 檔案是編譯時的中間目錄,也就是說在Bin中的內容出現之前,編譯器是在這裡進行一些檔案建立,修改等工作的。等全部完成之後才複製到Bin目錄中。(注意,此時obj的內容不會被清除)

三、SVN管理問題

   專案開發如果是分層開發,每個人負責一層(B層,U層,D層)等。並且對每一層進行許可權的分配。如果不注意SVN的使用,SVN就會出現下面的現象: 

   每天早上過來開啟VS的專案都會是下面的結果: 

   出現的原因主要是我們前面說的兩個檔案在搗鼓—> obj和bin 檔案是隨系統,隨個人實時更新的。 所以我們再更新的時候,由於許可權的問題導致,我們無法提交更新了的檔案,所以SVN的圖示就會出現變紅的現象。 

   解決該現象的方案:

    1. 修改SVN專案許可權問題:專案組長修改自己的許可權(允許訪問所有層)  
    2. 組長負責將每一層的bin 檔案和obj檔案移除專案之外。(方法:點選顯示所有資料夾圖示—>分別右鍵obj和bin—>選擇從專案中排除 )
    3. 更新整個專案檔案
    4. 收回許可權 
    5. 改動程式碼—>更新檔案
   當問題出現的時候,不要想著這是屬於正常現象。就如,在SVN的使用過程中,發現有的專案圖示呈黃色的時候,應該主動的去提問為什麼?主動的去發現問題,提問問題,這樣再下次遇到同樣的事情時,才能夠很好的提前去規劃問題,讓自己少走彎路。