2016-07-19 4 views
1

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

Чтобы запустить его на моем локальном компьютере, мне необходимо вручную скопировать следующие DLL в выходной каталог: libea32.dll и ssleay32.dll.

Когда я запускаю приложение на своей локальной машине, он преуспевает.

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

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'POSLink.dll' or one of its dependencies. The specified module could not be found.
at FileNotFoundExceptionExample.Program.Main(String[] args)

Это мой SSCCE

using POSLink; 
using System; 

namespace FileNotFoundExceptionExample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // this is stuff found in the POSLink namespace 
      var commSetting = new CommSetting(); 
      commSetting.saveFile(); 

      Console.WriteLine("Success"); 
     } 
    } 
} 

Я попытался с помощью Dependency Walker на POSLink.dll, но это WASN Мне очень полезно, потому что есть 381 ошибка, которая появляется, и они появляются, когда я запускаю ее на успешной машине.

Как начать диагностику этой ошибки?


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

* Assembly Binder Log Entry (7/19/2016 @ 2:18:48 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:\Users\Omitted\Desktop\notfoundexceptionexample\debug \FileNotFoundExceptionExample.exe
--- A detailed error log follows.

=== Pre-bind state information === LOG: DisplayName = POSLink, Version=1.0.5773.36725, Culture=neutral,
PublicKeyToken=f3876d2e4b7eb819 (Fully-specified) LOG: Appbase =
file:///C:/Users/Omitted/Desktop/notfoundexceptionexample/debug/ LOG:
Initial PrivatePath = NULL LOG: Dynamic Base = NULL LOG: Cache Base =
NULL LOG: AppName = FileNotFoundExceptionExample.exe Calling assembly
: FileNotFoundExceptionExample, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null.
=== LOG: This bind starts in default load context. LOG: Using application configuration file:
C:\Users\Omitted\Desktop\notfoundexceptionexample\debug\FileNotFoundExceptionExample.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: Post-policy reference: POSLink, Version=1.0.5773.36725,
Culture=neutral, PublicKeyToken=f3876d2e4b7eb819 LOG: GAC Lookup was
unsuccessful. LOG: Attempting download of new URL
file:///C:/Users/Omitted/Desktop/notfoundexceptionexample/debug/POSLink.DLL.
LOG: Assembly download was successful. Attempting setup of file:
C:\Users\Omitted\Desktop\notfoundexceptionexample\debug\POSLink.dll
LOG: Entering run-from-source setup phase. LOG: Assembly Name is:
POSLink, Version=1.0.5773.36725, Culture=neutral,
PublicKeyToken=f3876d2e4b7eb819 LOG: Binding succeeds. Returns
assembly from
C:\Users\Omitted\Desktop\notfoundexceptionexample\debug\POSLink.dll.
LOG: Assembly is loaded in default load context.

+0

Смотрите, если просмотр журнала Fusion предоставляет больше информации (убедись, что и запустить его от имени администратора). Он должен показать вам конкретные пути, по которым он попытался найти вашу DLL и ее зависимости. https://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx –

+0

где ваш 'using System.IO' также удостоверяется в ссылочном узле проекта, что у вас также есть добавлена ​​необходимая dll для 'POSLink' вручную – MethodMan

+0

Вы нашли все DLL в каталоге exe или ссылались на DLL из GAC? –

ответ

2

Итак, как выясняется, есть способ фильтрации через все несущественные ошибки, о которых говорит обходчик зависимостей.

  1. Dependency Walker.
  2. Получите инструмент разворота. Я использовал WinMerge.
  3. Запуск зависимых ходок на соответствующей DLL на вашей хорошей машине. Скопируйте содержимое окна журнала в текстовый файл и сохраните его.
  4. Запуск зависимого ходока на рассматриваемой DLL на вашей плохой машине. Скопируйте содержимое окна журнала в текстовый файл и сохраните его.
  5. Используйте инструмент diff для разграничения двух файлов txt. В моем случае отсутствующая dll находилась в верхней части (где ошибки) на плохой машине, ind в нижней части (где не ошибки) на хорошей машине.

Честно говоря, я смущен тем, что раньше этого не делал. Я только предполагал, что количество ошибок было одинаковым на основе того, как я предположил, что журнал был выложен.


Журнал - это среднее окно, выбранное на этом скриншоте.

Dependency walker log

Как оказалось msvcr120.dll действительно, чего не хватало, и найти подходящую, и сбросив его в мой выходной каталог фиксированной проблемы.

ПРИМЕЧАНИЕ:msvcr120.dll is the Visual C++ 2013 Runtime.Вместо того, чтобы вручную скопировать библиотеки DLL вокруг, правильное решение установка the Visual C++ Redistributable Packages for Visual Studio 2013

WinMerge

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

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