Кто-нибудь знает, что может заставить загрузчик Fusion просто пропустить DLL без предупреждения или подтверждения?Fusion loader не может найти 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 подробнее подробнее:
Состояние машины - это Windows 2008 64-бит, с .NET 2.0, 3.0 & 3.5 установлен.
Это же приложение работает просто отлично на другом компьютере (Vista 32-бит), с той же структурой каталогов и библиотек DLL, хотя те были построены на этой машине
Спасибо за идеи. Я добавил немного больше информации к исходному вопросу - это же приложение работает на другой машине (в отличие от другой ОС). Все задействованные EXE/DLL были построены на разных машинах, но все они имеют одинаковый размер.Я попытаюсь скопировать зависимости локально в каталог bin \ debug, но в конце концов он должен иметь возможность запускать из другого dir :(Спасибо! –
Это нормально, что он может запускаться из другого каталога, но он должен быть подписанный, я считаю, так что его можно добавить в конфигурационный файл, как в пункте 2 выше. –