Кто-нибудь знает, что может привести к тому, что загрузчик 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, хотя они были созданы на этой машине