使用Reflection处理依赖项

时间:2011-03-10 19:07:47

标签: vb.net 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。我已经用Google搜索了这是因为我在编译时没有对这些类进行序列化。

请有人帮帮我吗?目标是获取dll文件的所有依赖项的所有文件路径。

提前致谢。

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试使用程序集名称加载程序集(而不是程序集的完整文件/路径)。 对于在GAC(全局程序集缓存)中注册的程序集可以正常工作,但+您的+程序集可能未在GAC中注册,因此无法以相同的方式加载它们。 我将不得不四处寻找如何通过实际文件名加载程序集的示例。