Не удалось загрузить файл или сборку '***. Dll' или одну из ее зависимостей
У меня есть 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 ответов
или одна из его зависимостей
Это обычная проблема, вы не можете увидеть отсутствующую неуправляемую DLL с Fuslogvw.exe. Лучше всего запустить утилиту SysInternals ProcMon. Вы увидите, что он ищет DLL и не найдет ее. Режим профиля в Dependency Walker может показать это тоже.
У меня была та же проблема с dll вчера, и все, на что она ссылалась, была System, System.Data и System.Xml. Оказалось, что конфигурация сборки для типа платформы не выстроилась в линию. DLL была построена для x86, и программа, использующая ее, называлась "Любой ЦП", и, поскольку я работаю на машине с 64-разрядной версией, она запускала программу как x64 и имела проблемы с DLL-библиотекой x86. Я не знаю, если это ваша проблема или нет, просто подумал, что я бы упомянул это как что-то еще, чтобы проверить.
Недавно я столкнулся с этой проблемой, приложение будет нормально работать на машинах разработчика и выбирать другие машины, но не на недавно установленных машинах. Оказалось, что на машинах, на которых он работал, была установлена среда выполнения Visual C++ 11, а на недавно установленных машинах - нет. Добавление распространяемой среды выполнения Visual C++ 11 к установщику приложения устранило проблему...
Я столкнулся с этим недавно. Оказалось, что старая DLL была скомпилирована с предыдущей версией (Visual Studio 2008) и ссылалась на эту версию динамических библиотек времени выполнения. Я пытался запустить его в системе, в которой был только.NET 4.0, и я никогда не устанавливал динамические библиотеки времени выполнения. Решение? Я перекомпилировал DLL, чтобы связать статические библиотеки времени выполнения.
Проверьте журнал ошибок вашего приложения в Event Viewer (EVENTVWR.EXE). Это даст вам больше информации об ошибке и, вероятно, укажет на ее истинную причину.
У меня такая же проблема. Для меня это было вызвано настройками по умолчанию на локальном сервере IIS на моей машине. Таким образом, простой способ исправить это - использовать встроенный сервер разработки Visual Studio:)
Более новые версии IIS на компьютерах x64 имеют настройку, которая не позволяет 32-разрядным приложениям запускаться по умолчанию. Чтобы включить 32-разрядные приложения в локальном IIS, выберите соответствующий пул приложений в диспетчере IIS, нажмите "Дополнительные параметры" и измените "Включить 32-разрядные приложения" с False на True
У меня была одна и та же проблема - DLL всегда работал, потом мой компьютер зависал, и после этого у меня возникла проблема "не удалось загрузить файл или сборку.... dll"
Два возможных решения: при сбое компьютера могут быть несовместимые файлы
C:\Users\<yourUserName>\AppData\Local\Temp\Temporary ASP.NET Files
Удаление этой папки, перекомпиляция и ошибка исчезла.
Однажды мне также пришлось удалить папку с пакетами (я читал это где-то еще). Разрешите Visual Studio / nuget установить недостающие пакеты (или переустановить вручную), после чего все снова будет в порядке.
Этот ответ совершенно не связан с ситуацией ОП, и это слишком маловероятно для кого-либо еще, но на всякий случай он может кому-то помочь...
В моем случае я получал "Не удалось загрузить файл или сборку" 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.)
Более простой способ определить, какие зависимости есть у нативной библиотеки DLL, - использовать Dependency Walker - http://www.dependencywalker.com/
Я проанализировал собственную DLL и обнаружил, что она зависит от MSVCR120.DLL и MSVCP120.DLL, которые не были установлены на моем промежуточном сервере в каталоге System32. Я установил среду выполнения C++ на своем промежуточном сервере, и проблема была решена.
Если бы у меня была та же проблема и она была решена, убедившись, что проекты в решении имеют одинаковую конфигурацию и платформу (в моем случае это был 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
1) Скопируйте DLL из "Externals\ffmpeg\bin" в выходной каталог вашего проекта (где находится исполняемый файл); 2) Убедитесь, что ваш проект создан для цели x86 (работает в 32-битном режиме).