天天看點

VS dll 引用依賴

在公司實習過程中,經常遇到三個問題:

  1. 開發環境
  2. dll引用依賴
  3. dll版本控制

一般公司都會配置開發/測試/Lab/線上四個環境,之後不管時開發什麼項目,都與環境分不開邊。這個和dll版本控制暫且記下,以後碰到想寫的再寫。

引用依賴是今天踩到的一個坑:我建立了一個項目A,引用了類庫B,然而類庫B中引用了類庫C,那麼你需要在項目A中引用項目C。具體可以看文末附的轉載的一篇文章。

文章連結:vs dll引用機制

VS dll 引用依賴
VS dll 引用依賴
VS dll 引用依賴
vs2012編譯的時候,遇到一個問題就是項目A中運作時缺失dll的問題,項目A引用類庫B,類庫B引用了x,y等dll,編譯A項目的時候,出現x沒拷貝到bin 目錄。

通過跟蹤編譯輸出發現,x沒拷貝的原因是y這個dll也引用了x,而且y引用的x版本高于目前B引用的。這樣在編譯的時候,就會出現提示x版本1.0.0.0與x版本0.9.3.0出現沖突,選擇x版本1.0.0.0 因為此版本更高(圖1),然後開始周遊相關路徑(圖2)去尋找該1.0.0.0版本的dll,這個編譯機制應該是vs出于引用高版本dll以向下相容的目的。

具體如下圖所示

clipboard

圖1

image

圖2

檢視編譯輸出的方法 打開vs的工具--選項 選擇診斷或者詳細,能捕捉到編譯時更多的操作動作,具體如下圖3

image

圖3

但是類庫B也引用了x和y,b編譯時卻可以在bin檔案得到x的輸出,如果是依照上面的編譯機制,x也是不能編譯輸出的,這裡vs采用了如下機制,即類庫B引用的x版本0.9.0.0雖然低于y引用的x 1.0.0.0,但在這裡x是直接引用在類庫B裡,那這樣x 0.9.0.0即為主版本,那這時會将該0.9.0.0版本的x編譯到類庫B的bin檔案目錄下。

image

在項目obj/bin檔案目錄下 會有”項目名.csproj.FileListAbsolute.txt”的檔案,裡面是編譯時輸出到bin檔案目錄下的dll清單。