Вопрос по c#, .net – System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'X' или одну из ее зависимостей при развертывании приложения

23

У меня странная проблема с развертыванием приложения, которое ссылается на сборку, написанную на управляемом c ++.

Я создал сборку X, скомпилировал ее и сослался на нее в исполняемом файле, называемом Starter.

Starter.exe запускается нормально на локальной машине. Однако, когда я копирую ВСЕ содержимое папки отладки стартера в виртуальный компьютер и пытаюсь запустить его там, происходит сбой со следующим исключением:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or 
assembly 'X' or one of its dependencies. The specified module could not be found.

Это не имеет никакого смысла для меня, потому что X находится прямо в той же папке, что и Starter.exe.

Что может быть причиной этой проблемы?

UPDATE

Я изучил зависимости в Reflector на целевом компьютере, и он смог найти файлы для всех из них.

Я также изменил конфигурации на x86 / win32 для всех проектов.

UPDATE

Вот журналы из журнала Fusion (расположение: C: \ FusionLog \ Default \ Starter.exe \ X, версия = 1.0.4538.22813, культура = нейтральная, PublicKeyToken = null.HTM):

*** Assembly Binder Log Entry  (6/4/2012 @ 1:56:13 PM) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = MENKAUR-7683827\Administrator
LOG: DisplayName = X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Starter.exe
Calling assembly : Starter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\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:/Documents and Settings/Administrator/Desktop/tmp/k;k/X.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
LOG: Binding succeeds. Returns assembly from C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll.
LOG: Assembly is loaded in default load context.

Единственные ошибки находятся в каталоге C: \ FusionLog \ NativeImage \ Starter.exe \:

*** Assembly Binder Log Entry  (6/4/2012 @ 1:56:13 PM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = MENKAUR-7683827\Administrator
LOG: DisplayName = BookmarkWiz.Kernel, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Starter.exe
Calling assembly : Starter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Start binding of native image X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null.
WRN: No matching native image found.
LOG: IL assembly loaded from C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll.

Я не могу подписать сборку, так как она ссылается на несколько других сборок, которые не подписаны

смотрите обновление ..... Arsen Zahray
Похоже, что вы должны исследовать с помощью Fusion Log -stackoverflow.com/questions/4562859/… Shaun Wilde
Пожалуйста, посмотрите мой обновленный ответ и проверьте, не заблокированы ли ваши dll, потому что они из ненадежного источника. flayn

Ваш Ответ

3   ответа
3

апке проекта.

Это не помогло в моем случае.
3

переименовав DLL. DLL была переименована вручную, когда она была загружена в ее общую папку (номер версии был добавлен к имени файла). Удаление номера версии из загруженного файла решило проблему.

16

... Could not load file or assembly 'X' or one of its dependencies ...

Скорее всего, он не может загрузить другую зависимость.

Вы можете попробовать проверить зависимости с помощью обходчика зависимостей.

то есть:http://www.dependencywalker.com/

Также проверьте свою конфигурацию сборки (x86 / 64)

Редактировать: У меня также была эта проблема однажды, когда я копировал dll в zip из «ненадежного» сетевой ресурс. Файл был заблокирован Windows, и возникла исключительная ситуация FileNotFoundException.

Посмотреть здесь:Обнаруженные библиотеки DLL из Интернета и "заблокированные" КАСПОЛЬ

Обходчик зависимостей может только профилировать неуправляемые программы. Arsen Zahray

Похожие вопросы