簡體   English   中英

使用反射處理依賴項

[英]Working with dependencies using Reflection

我正在嘗試在已知路徑中讀取一個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文件中的一些依賴項。

當我傳遞文件路徑時,我可以檢測到所有依賴於該文件的程序集。 但是,當我嘗試恢復依賴項的文件路徑時,我可以找到所有依賴項的所有文件路徑,除了我制作的dll文件。

當我運行代碼時,我得到以下日志結果:

mscorlib:C:\\ WINDOWS \\ Microsoft.NET \\ Framework \\ 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:未找到。 System.Data:C:\\ WINDOWS \\ assembly \\ GAC_32 \\ System.Data \\ 2.0.0.0__b77a5c561934e089 \\ System.Data.dll IM2_DataRow:未找到。 System.Drawing:C:\\ WINDOWS \\ assembly \\ GAC_MSIL \\ System.Drawing \\ 2.0.0.0__b03f5f7f11d50a3a \\ System.Drawing.dll IM2_DataProviderTools:未找到。 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:未找到。 Telerik.WinControls.GridView:C:\\ WINDOWS \\ assembly \\ GAC_MSIL \\ Telerik.WinControls.GridView \\ 2009.2.9.729__5bb2a467cbec794e \\ Telerik.WinControls.GridView.dll IM2_Language_Controller:未找到。 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:未找到。

以IM2_開頭的所有文件都是我想要獲取路徑的文件。

我觀察到找不到的文件具有PublicKeyToken = null。 我一直在用谷歌搜索,這是因為在編譯時沒有序列化這些類。

有人可以幫我嗎? 目標是獲取dll文件的所有依賴項的所有文件路徑。

提前致謝。

看起來您正在嘗試使用程序集名稱(而不是程序集的完整文件/路徑)來加載程序集。 對於在GAC(全局程序集緩存)中注冊的程序集可以運行,但是+ your +程序集可能未在GAC中注冊,因此無法以相同的方式加載它們。 我將不得不挖掘一個示例,說明如何通過實際文件名加載程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM