Не удалось загрузить файл или сборку '***. Dll' или одну из ее зависимостей - PullRequest
31 голосов
/ 10 декабря 2010

У меня есть эта dll, которую я создал давным-давно, и использую для подключения к БД конкретного программного обеспечения, для которого я разрабатываю. У меня не было проблем в течение более 4 лет и бесчисленных приложений с этой 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. Так что, насколько это возможно, я не вижу ничего плохого.

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

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

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

Я уже пытался переписать все это. Который дал те же результаты.

Кто-нибудь знает?

редактирует

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

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\"
----------------------------------------\"

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

Ответы [ 10 ]

35 голосов
/ 10 декабря 2010

или одна из его зависимостей

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

18 голосов
/ 10 декабря 2010

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

6 голосов
/ 07 декабря 2012

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

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

5 голосов
/ 21 февраля 2014

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

4 голосов
/ 10 декабря 2010

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

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

2 голосов
/ 19 октября 2013

Этот ответ совершенно не связан с ситуацией ОП и очень маловероятен для других, но на всякий случай может кому-то помочь ...

В моем случае я получал "Не могзагрузите файл или сборку «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.)

1 голос
/ 07 августа 2015

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

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

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

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

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

0 голосов
/ 01 августа 2018

У меня была такая же проблема, и она была решена, убедившись, что проекты в решении имеют одинаковую конфигурацию и платформу (в моем случае это был Debug x64). Каким-то образом в VIsual Studio отсутствовала x64 для некоторых проектов, и я вручную отредактировал файл .sln (скопировал конфигурации и платформы из правильно построенных проектов в проекты, в которых отсутствовали нужные мне настройки). Вот как выглядит один из проектов:

{1BA29980-EE5D-4476-AFFC-0F177B6C9865}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1BA29980-EE5D-4476-AFFC-0F177B6C9865}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1BA29980-EE5D-4476-AFFC-0F177B6C9865}.Debug|x64.ActiveCfg = Debug|x64
{1BA29980-EE5D-4476-AFFC-0F177B6C9865}.Debug|x64.Build.0 = Debug|x64
{1BA29980-EE5D-4476-AFFC-0F177B6C9865}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1BA29980-EE5D-4476-AFFC-0F177B6C9865}.Release|Any CPU.Build.0 = Release|Any CPU
{1BA29980-EE5D-4476-AFFC-0F177B6C9865}.Release|x64.ActiveCfg = Release|x64
{1BA29980-EE5D-4476-AFFC-0F177B6C9865}.Release|x64.Build.0 = Release|x64

Но тогда та же ошибка произошла для проекта, в котором в зависимостях был файл Java (* .jar). Мне пришлось редактировать переменные среды вручную, чтобы создать запись с этим значением

C: \ Program Files \ Java \ jre1.8.0_171 \ bin \ server

для пути Java и поместите его поверх элементов Path.

Это исправило проблему, пока я не обновил Java на своем компьютере. Мне пришлось отредактировать номер версии в переменных среды, чтобы он соответствовал обновленному имени папки.

C: \ Program Files \ Java \ jre1.8.0_181 \ bin \ server

0 голосов
/ 01 мая 2015

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

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

0 голосов
/ 16 апреля 2014

1) Скопируйте DLL из "Externals \ ffmpeg \ bin" в выходной каталог вашего проекта (где находится исполняемый файл);2) Убедитесь, что ваш проект создан для цели x86 (работает в 32-битном режиме).

Следуйте этой теме, чтобы узнать больше

...