2010-12-10 4 views
23

У меня есть эта DLL, которую я создал давно, и использую для подключения к db определенного программного обеспечения, для которого я разрабатываю. У меня не было проблем в течение более 4 лет и бесчисленных приложений с этой DLL.Не удалось загрузить файл или сборку '***. Dll' или одну из его зависимостей

Попытка развернуть мое последнее творение, я получаю следующее сообщение об ошибке:

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

Таким образом, для каждой библиотеки DLL я когда-либо писал, я всегда делал простое приложение формы, чтобы проверить, что DLL только сам по себе. Запуск этого простого приложения дало ту же ошибку. DLL не загружает и не использует ничего, кроме: System, System.Data, System.XML. Так что, насколько это возможно, я не вижу ничего плохого.

Кстати, все работает на станции dev. Проблема ограничена станциями развертывания. .Net и необходимые перераспределители, так как я делаю все на C++, развернуты и работают.

Запуск FUSLOGVW.exe показал, что все работает нормально.

Запуск depend.exe said: Warning: по крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в модуле, зависящем от задержки.

Я уже пробовал переписывать все это. Это дало те же результаты.

Удовлетворяет кого-нибудь?

редактирует

Вот общее сообщение об ошибке:

See the end of this message for details on invoking \" 
just-in-time (JIT) debugging instead of this dialog box.\" 

************** Exception Text **************\" 
System.IO.FileNotFoundException: Could not load file or assembly 'connectionTo.dll' or one of its dependencies. The specified module could not be found.\" 
File name: 'connectionToJobboss32.dll'\" 
    at TESTConnection.Form1.button1_Click(Object sender, EventArgs e)\" 
    at System.Windows.Forms.Control.OnClick(EventArgs e)\" 
    at System.Windows.Forms.Button.OnClick(EventArgs e)\" 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)\" 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)\" 
    at System.Windows.Forms.Control.WndProc(Message& m)\" 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)\" 
    at System.Windows.Forms.Button.WndProc(Message& m)\" 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)\" 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)\" 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)\" 
\" 



************** Loaded Assemblies **************\" 
mscorlib\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)\" 
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll\" 
----------------------------------------\" 
TESTConnection\" 
    Assembly Version: 1.0.3996.18980\" 
    Win32 Version: \" 
    CodeBase: file:///C:/Program%20Files%20(x86)/conn/TESTConnection.exe\" 
----------------------------------------\" 
System.Windows.Forms\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll\" 
----------------------------------------\" 
System.Drawing\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll\" 
----------------------------------------\" 
System\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll\" 
----------------------------------------\" 

Там нет ошибки в средстве просмотра событий.

ответ

18

У меня была такая же проблема с dll вчера, и все ссылки на нее были System, System.Data и System.Xml. Оказывается, конфигурация сборки для типа платформы не выстраивалась в линию. DLL была построена для x86, а программа, использующая его, была «Any CPU», и поскольку я запускаю машину x64, она запускала программу как x64 и имела проблемы с dll x86. Я не знаю, является ли это вашей проблемой или нет, просто подумал, что я бы назвал это чем-то еще, чтобы проверить.

+0

Поскольку я пишу в Managed C++, «Any CPU» не существует. Я все равно проверил диспетчер конфигурации, и оба, dll и app, установлены для Win32. Поскольку я строю это в 32 бит, я запускал его из папки Program Files (x86), чтобы избежать проблем с 64-битными. ... Поэтому я изучал это, но я не видел ничего плохого. О, и одна из станций, которую я пытаюсь развернуть, - это 32-битная машина. –

+0

Имел подобную проблему. Я прочитал ваш ответ и не смог изменить его с помощью интерфейса VS. Поэтому я открыл файл проекта в текстовом редакторе и вручную изменил его на AnyCPU, и он работает.Даже интерфейс VS принял значение, которое должно быть на первом месте. –

4

Я столкнулся с этим недавно. Оказалось, что старая DLL была скомпилирована с предыдущей версией (Visual Studio 2008) и ссылалась на эту версию динамических библиотек времени исполнения. Я пытался запустить его в системе, на которой был только .NET 4.0, и я никогда не устанавливал динамические библиотеки времени исполнения. Решение? Я перекомпилировал DLL для связывания статических библиотек времени исполнения.

Проверьте журнал ошибок приложения в приложении просмотра событий (EVENTVWR.EXE). Он даст вам больше информации об ошибке и, вероятно, укажет вам на реальную причину проблемы.

+0

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

+1

Вы говорите, что это работает на dev-машине, но не на машине развертывания. Вы развертываете отладочную версию DLL, и у вас нет библиотек отладки на машине развертывания? Есть ли другая версия connectionTo.dll или connectionToJobboss32.dll где-то в пути поиска? –

+0

Я пробовал как отлаживать, так и выпускать версии. Все с теми же ошибками. Я использовал для получения ошибки MSVCR100.dll. Которая является распространяемой библиотекой для приложений, созданных с помощью MS VC++, но сейчас я копирую ее вместе с приложением. Я также заменю его на MSVCR100d.dll при копировании отладочной версии. –

30

or one of its dependencies

Это обычная проблема, вы не видите отсутствующую неуправляемую DLL с файлом Fuslogvw.exe. Лучше всего запустить программу SysInternals ProcMon. Вы увидите, что он ищет DLL и не находит его. Режим профиля в Dependency Walker также может отображать его.

+1

Не могли бы вы указать, что искать в журнале ProcMon или даже в Dependency Walker? Я честно не вижу ничего, кроме Успехов в обеих утилях. В ProcMon я вижу несколько «Файл не найден», но за ними сразу же следует поиск одного и того же файла на другом пути и успешный. –

+0

Вы смотрите на правильную вещь afaict. Разочарование, это, как правило, верный способ увидеть это. Не знаю, кроме утопления в данных. Вы можете сохранить трассировку и поместить ее в службу совместного доступа к файлам, если хотите, чтобы на ней был еще один набор глаз. –

+1

Настройка поля «Рабочий каталог» в настройках проекта .NET (вкладка «Отладка») в каталог со всеми DLL, для которого моя программа зависела от исправления этой проблемы для меня. – MasterMastic

6

У меня была та же проблема. Для меня это было вызвано настройками по умолчанию на локальном сервере IIS на моей машине.Таким образом, простой способ исправить это - использовать вместо этого встроенный сервер разработки Visual Studio.

Новые версии IIS на машинах x64 имеют параметр, который не позволяет запускать 32-разрядные приложения по умолчанию. Чтобы включить 32-разрядные приложения в локальном IIS, выберите соответствующий пул приложений в диспетчере IIS, нажмите «Дополнительные настройки» и измените «Включить 32-разрядные приложения» с False на True

2

Этот ответ полностью не связан с OP ситуация, и это очень маловероятный сценарий для кого-то еще, но на всякий случай это может помочь кому-то ...

В моем случае я получал «Не удалось загрузить файл или сборку» System.Windows.Forms, Version = 4.0.0.0 ... ", потому что я разобрал и повторно собрал программу, используя ILDAsm.exe и ILAsm.exe из .Net Framework/SDK версии 2. Переключение на ILDAsm.exe и ILAsm.exe из .NET Framework/SDK версии 4 исправлено проблема.

(Как ни странно, несмотря на то, делать то, что я сделал, может показаться очевидной ошибки, результирующий файл EXE, который не работал так, показывают, что это предназначалось .Net 4 при исследовании с JetBrains dotPeek.)

3

Я недавно нажмите эту проблему, приложение будет отлично работать на машинах разработчика и выберите другие машины, но не на недавно установленных компьютерах. Оказалось, что на машинах, на которых он работал, был установлен Runtime Visual C++ 11, в то время как только что установленные машины не были. Добавление Visual C++ 11 время выполнения распространяемого для установщика приложения фиксированного вопроса ...

+1

Обратите внимание, что есть 2 версии Visual C++ Runtime: 32 и 64 бит. Установите оба из них, чтобы убедиться. В моем случае проблема только в 64-битном пакете. – kDar

0

1) Копирование библиотеки DLL из «Экстерналий \ FFmpeg \ Bin» в выходном каталог проекта (где исполняемый STAYS); 2) Убедитесь, что ваш проект построен для целевой цели x86 (работает в 32-битном режиме).

Follow this thread for more

0

Простой способ определить, какие зависимости родную DLL имеет это использовать Dependency Walker - http://www.dependencywalker.com/

Я анализировал родной DLL и обнаружил, что это зависит от MSVCR120.DLL и MSVCP120.DLL, оба из которых не были установлены на моем промежуточном сервере в каталоге System32. Я установил среду выполнения C++ на моем промежуточном сервере, и проблема была решена.

1

Я была такая же проблема - это .dll работает все время, то мой компьютер сломался, и после этого у меня была эта проблема «не может загрузить файл или сборку .... DLL»

два возможных решения: когда компьютер разбился там могут быть некоторые несовместимые файлы в

C:\Users\<yourUserName>\AppData\Local\Temp\Temporary ASP.NET Files 

Удаление этой папки, перекомпиляции и ошибка исчезла.

Как только я должен был удалить папку с папками (я прочитал это где-то еще). Разрешите Visual Studio/nuget установить отсутствующие пакеты (или вручную переустановить), а затем все будет хорошо.