Работа с зависимостями с помощью Reflection - PullRequest
0 голосов
/ 10 марта 2011

Я пытаюсь прочитать все зависимости одного файла 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

Чтобы проверить это, я разработал dll в VB NET с несколькими зависимостями от других созданных мной 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__b03f5f7f11d50a3ual \ Microsoft..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__5brik794c \ beb2794c.WinControls.dll IM2_CommonTools: НЕ НАЙДЕН.

Все файлы, которые начинаются с IM2_ - это файлы, которые я хочу получить путь.

Я заметил, что файлы, которые не могут найтиимеет PublicKeyToken = null.Я гуглил это, потому что я не сериализовал классы, когда они были скомпилированы.

Пожалуйста, кто-нибудь может мне помочь?Цель - получить все пути к файлам всех зависимостей файла DLL.

Заранее спасибо.

1 Ответ

0 голосов
/ 10 марта 2011

Похоже, вы пытаетесь загрузить сборки, используя имя сборки (НЕ полный файл / путь к сборке). Для сборок, зарегистрированных в GAC (глобальный кэш сборок), это будет работать, но + ваши + сборки, вероятно, не зарегистрированы в GAC, поэтому их нельзя загрузить таким же образом. Мне придется поискать пример загрузки сборки через фактическое имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...