2009-09-17 2 views
3

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

ответ

1

Да он должен остановиться, когда он находит Required Dll так пятый «Попытка скачать ...» должна была найти его ...

Однако где же запускается приложение командной строки? Если это папка Debug, то несколько вещей, которые вы можете попробовать являются

  1. Есть зависимые библиотеки DLL в той же папке
  2. Войдите на сборку и ссылки через файл .config в следующем формате

    <dependentAssembly> 
        <assemblyIdentity name="WebServices.dll" publicKeyToken="<whatever this public key it>" /> 
        <codeBase version="1.0.0.0" href="..\WebServices.dll" /> 
    </dependentAssembly> 
    
  3. Подпишите их, а затем установите зависимые сборки в GAC.

Я мог бы быть в отъезде, но это несколько вещей, чтобы попробовать.

+0

Спасибо за идеи. Я добавил немного больше информации к исходному вопросу - это же приложение работает на другой машине (в отличие от другой ОС). Все задействованные EXE/DLL были построены на разных машинах, но все они имеют одинаковый размер.Я попытаюсь скопировать зависимости локально в каталог bin \ debug, но в конце концов он должен иметь возможность запускать из другого dir :(Спасибо! –

+0

Это нормально, что он может запускаться из другого каталога, но он должен быть подписанный, я считаю, так что его можно добавить в конфигурационный файл, как в пункте 2 выше. –

Смежные вопросы