我試圖讀取已知路徑中的一個dll文件的所有依賴關係。要做到這一點,我使用反射,因爲這代碼所示:使用反射來處理依賴關係
For Each AsmName As AssemblyName In asm.GetReferencedAssemblies()
Try
Log += AsmName.Name & " : " & [Assembly].ReflectionOnlyLoad(AsmName.ToString).Location & vbCrLf
Catch ex As Exception
Log += AsmName.Name & " : NOT FOUND." & vbCrLf
End Try
Next
爲了驗證這一點,我已經開發了VB NET一個dll從我做的其他的dll文件的幾個dependeces。
當我通過文件路徑時,我可以檢測到所有依賴於該文件的程序集。但是當我嘗試恢復依賴文件的文件路徑時,我可以找到所有依賴項的所有文件路徑,除了我製作的dll文件。
當我跑我得到以下日誌結果代碼:
mscorlib程序:C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ mscorlib.dll中 Microsoft.VisualBasic程序:C:\ WINDOWS \ assembly \ GAC_MSIL \ Microsoft.VisualBasic \ 8.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualBasic.dll System.Xml.Linq:C:\ WINDOWS \ assembly \ GAC_MSIL \ System.Xml.Linq \ 3.5.0.0__b77a5c561934e089 \ System.Xml .Linq.dll 系統:C:\ WINDOWS \ assembly \ GAC_MSIL \ System \ 2.0.0.0__b77a5c561934e089 \ System.dll IM2_DataFile:NOT FOUND。 System.Data:C:\ WINDOWS \ assembly \ GAC_32 \ System.Data \ 2.0.0.0__b77a5c561934e089 \ System.Data.dll IM2_DataRow:NOT FOUND。 System.Drawing:C:\ WINDOWS \ assembly \ GAC_MSIL \ System.Drawing \ 2.0.0.0__b03f5f7f11d50a3a \ System.Drawing.dll IM2_DataProviderTools:NOT FOUND。 System.Windows.Forms:C:\ WINDOWS \ assembly \ GAC_MSIL \ System.Windows.Forms \ 2.0.0.0__b77a5c561934e089 \ System.Windows.Forms.dll Telerik.WinControls.UI:C:\ WINDOWS \ assembly \ GAC_MSIL \ Telerik.WinControls.UI \ 2009.2.9.729__5bb2a467cbec794e \ Telerik.WinControls.UI.dll IM2_DataRowPanel:NOT FOUND。 Telerik.WinControls.GridView:C:\ WINDOWS \ assembly \ GAC_MSIL \ Telerik.WinControls.GridView \ 2009.2.9.729__5bb2a467cbec794e \ Telerik.WinControls.GridView.dll IM2_Language_Controller:NOT FOUND。 System.Core:C:\ WINDOWS \ assembly \ GAC_MSIL \ System.Core \ 3.5.0.0__b77a5c561934e089 \ System.Core.dll Telerik.WinControls:C:\ WINDOWS \ assembly \ GAC_MSIL \ Telerik.WinControls \ 2009.2.9.729__5bb2a467cbec794e \ Telerik.WinControls.dll IM2_CommonTools:NOT FOUND。
所有以IM2_開頭的文件都是我想要的路徑文件。
我發現那些無法找到的文件有PublicKeyToken = null。我用這個Google搜索了,這是因爲我沒有在編譯時序列化類。
請任何人都可以幫我嗎?目標是獲取一個dll文件的所有依賴關係的所有文件路徑。
在此先感謝。
你說得對。我想知道一個DLL使用的每個程序集的當前文件路徑。要做到這一點,只有我有集合GetReferencedAssemblies的AssemblyName。對於所有的GAC來說,沒有問題,但是與自定義的dll無法獲得文件路徑。目標是創建一個包含該dll所需的所有文件的包。 – Nemesys 2011-03-10 20:16:59
我試圖用強名稱創建dll以填充PublicKeyToken字段,因爲我懷疑問題可能是所有的自定義dll都將此值設置爲null。但問題依然存在。 – Nemesys 2011-03-10 20:19:32