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以向下兼容的目的。blog
具體以下圖所示ip
圖1get
圖2it
查看編譯輸出的方法 打開vs的工具--選項 選擇診斷或者詳細,能捕捉到編譯時更多的操做動做,具體以下圖3編譯
圖3cli
可是類庫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文件目錄下。List
在項目obj/bin文件目錄下 會有」項目名.csproj.FileListAbsolute.txt」的文件,裏面是編譯時輸出到bin文件目錄下的dll列表。遍歷