Кто-нибудь знает, что может заставить загрузчик Fusion просто пропустить DLL без предупреждения или подтверждения?
Когда я пытаюсь сделать это (в C #) из приложения командной строки
Assembly.LoadFrom("c:\\Deploy\\bin\\WebServices.dll")
Я вижу это:
"Невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации."
Эта DLL имеет зависимость от Platform.DLL, но загрузка этой зависимости завершается неудачно, поэтому эта строка кода вызывает исключение. Когда я проверяю сообщение о загрузке сборки Fusion, вот что я вижу:
=== Pre-bind state information ===
LOG: DisplayName = Platform, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null (Fully-specified)
...
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\config\\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform.DLL.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform/Platform.DLL.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform.EXE.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform/Platform.EXE.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform.DLL.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform/Platform.DLL.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform.EXE.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform/Platform.EXE.
Дело в том, что DLL присутствует в c:\Deploy\bin\Platform.DLL
, с правильной версией и без подписанного открытого ключа.
Вещи, о которых я думал:
1. Может быть, это действительно зависимость Platform.DLL, которая нарушается, вызывая такое поведение? (Я прогнал дерево зависимостей в Reflector, но не обнаружил отсутствующих DLL)
2. Может быть, есть несоответствие выпуска / отладки, или 64-битная или 32-битная версия? но все было построено на одной машине
3. Может быть, я неправильно читаю журналы, но не должен ли он остановиться, когда попадет в найденную DLL? Я не вижу в этом журнале ни «успешного», ни «неудачного» сообщения. Я просто знаю, что это не удалось из-за исключения.
PS больше технических деталей:
Компьютерная среда - 64-разрядная Windows 2008 с установленными .NET 2.0, 3.0 и 3.5.
Это же приложение прекрасно работает на другом компьютере (32-разрядная Vista) с той же структурой каталогов и DLL, хотя они были созданы на этом компьютере