При загрузке во время загрузки Azure.Search.Common.5.0.2 не удается загрузить Microsoft.Rest.ClientRuntime - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь загрузить dll для Microsoft.Azure.Search.Common.5.0.2 во время выполнения.От того, что я вижу на странице Nuget , и от того, что Nuget загружает при установке, это зависит от Microsoft.Rest.ClientRuntime.2.3.12.Однако, когда я напрямую пытаюсь загрузить dll Azure.Search.Common, используя следующее: -

Assembly.LoadFrom(dllPath).GetTypes().Select(t => t.Namespace).Distinct().ToList<string>();

, я получаю следующее исключение загрузчика: -

{"Не удалосьзагрузить файл или сборку 'Microsoft.Rest.ClientRuntime, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей. Система не может найти указанный файл. ":" Microsoft.Rest.ClientRuntime, Version =2.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 "}

Я загружаю dll после установки из nuget.В частности, я загружаю следующую DLL:

Microsoft.Azure.Search.Common \ Microsoft.Azure.Search.Common.5.0.2 \ lib \ net452 \ Microsoft.Azure.Search.Common.dll

Просто чтобы быть уверенным, я также просмотрел файлы csproj и config, чтобы проверить перенаправление некоторых версий, но это не так.

Контекст: я хочу знать все возможные пространства имен, которые может использовать проект, поэтому я загружаю и загружаю все пакеты nuget, чтобы получить их пространства имен, среди прочего.

РЕДАКТИРОВАТЬ:

Iпопытался дополнительно проанализировать DLL, загрузив его в ILSpy.При загрузке dll ILSpy также показывает, что он ссылается на версию 2.0.0.0 Microsoft.Rest.ClientRuntime.Также не удается загрузить эти ссылки и выдает следующие ошибки: -

// Microsoft.Rest.ClientRuntime, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 // Информация о загрузке ссылки на сборку: // Возникли некоторые проблемы при загрузке эталонной сборки, подробнее см. Ниже!// Ошибка: не удалось найти ссылку: Microsoft.Rest.ClientRuntime, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35

// System.Net.Http, версия = 4.0.0.0, культура =нейтральный, PublicKeyToken = b03f5f7f11d50a3a (неразрешенный) // Newtonsoft.Json, версия = 6.0.0.0, культура = нейтральный, PublicKeyToken = 30ad4fe6b2a6aeed (неразрешенный) // Microsoft.Rest.ClientRuntime.Azure, версия = 3.0.0.0, культура = нейтральный,PublicKeyToken = 31bf3856ad364e35 // Информация о загрузке ссылки на сборку: // Возникли некоторые проблемы при загрузке ссылки на сборку, дополнительную информацию см. Ниже!// Ошибка: не удалось найти ссылку: Microsoft.Rest.ClientRuntime.Azure, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35

1 Ответ

0 голосов
/ 02 октября 2018

Кстати работает следующее:

var ldAssmbly = Assembly.LoadFrom("Microsoft.Azure.Search.Common.dll");
var results = ldAssmbly.GetTypes().Select(t => t.Namespace).Distinct().ToList<string>();

enter image description here

Хитрость заключается в том, чтобы скопировать все зависимости в выходную папку (как я сделал).Microsoft любезно создала сборочный загрузчик, где он может сканировать зависимости в текущем пути.Воспользуйтесь этим:)

Это зависит от v2.0.0.0 - ниже от манифеста IL

enter image description here

Можете ли выпроверьте ваш App.config - добавляется ли перенаправление сборки при установке пакета nuget?Это может быть причиной того, что это не работает при отраженной загрузке сборки.

Обновление: - Да - Кажется Хитрым: -

после установки nuget - оно действительно говоритЗависимость v2.3.12 Однако добавленная DLL показывает v2.0.0 в VisualStudio.enter image description here в свойствах файла dll указано v2.3.12 (что происходит из атрибута версии AssemblyInfo)

enter image description here

Но при проверке IL -его явно v2.0.0 (что показывает VisualStudio)

enter image description here

...