繁体   English   中英

无法加载文件或程序集“ XXXX.dll”或其依赖项之一。 指定的模块无法找到

[英]Could not load file or assembly 'XXXX.dll' or one of its dependencies. The specified module could not be found

我有一个直接引用dll文件的应用程序: POSLink.dll

为了libea32.dll在我的本地计算机上运行,​​我必须手动将以下dll复制到输出目录: libea32.dllssleay32.dll

当我在本地计算机上运行该应用程序时,它会成功。

在目标计算机上运行应用程序时,出现以下错误:

未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集POSLink.dll或其依赖项之一。 指定的模块无法找到。
在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");
        }
    }
}

我尝试在POSLink.dll上使用Dependency Walker ,但这对我不是很有用,因为会显示381个错误,并且当我在成功的计算机上运行它时也会显示这些错误。

我什至如何开始排除此错误?


当我运行Fuision日志查看器,然后在目标计算机上运行该应用程序时,我得到以下日志:

*装配活页夹日志条目(7/19/2016 @ 2:18:48 PM)*

操作成功。 绑定结果:HR =为0x0。 手术
成功完成。

程序集管理器从以下位置加载:
C:\\ Windows \\ Microsoft.NET \\ Framework \\ v4.0.30319 \\ clr.dll在
可执行
C:\\ Users \\ Omitted \\ Desktop \\ notfoundexceptionexample \\ debug \\ FileNotFoundExceptionExample.exe
---详细的错误日志如下。

===预绑定状态信息===日志:DisplayName = POSLink,版本= 1.0.5773.36725,文化=中性,
PublicKeyToken = f3876d2e4b7eb819(完全指定)LOG:Appbase =
文件:/// C:/用户/省略/桌面/ notfoundexceptionexample /调试/日志:
初始PrivatePath =空日志:动态基础=空日志:缓存基础=
NULL日志:AppName = FileNotFoundExceptionExample.exe调用程序集
:FileNotFoundExceptionExample,版本= 1.0.0.0,区域性=中性,
公钥=空。
=== LOG:此绑定在默认加载上下文中启动。 日志:使用应用程序配置文件:
C:\\ Users \\用户略\\桌面\\ notfoundexceptionexample \\调试\\ FileNotFoundExceptionExample.exe.Config
日志:使用主机配置文件:日志:使用机器配置
来自的文件
C:\\ WINDOWS \\ Microsoft.NET \\框架\\ v4.0.30319 \\ CONFIG \\ machine.config中。
日志:政策后参考:POSLink,版本= 1.0.5773.36725,
文化=中性,PublicKeyToken = f3876d2e4b7eb819日志:GAC查找为
不成功。 日志:尝试下载新的URL
文件:/// C:/Users/Omitted/Desktop/notfoundexceptionexample/debug/POSLink.DLL。
日志:程序集下载成功。 尝试设置文件:
C:\\ Users \\用户略\\桌面\\ notfoundexceptionexample \\调试\\ POSLink.dll
日志:进入从源运行设置阶段。 日志:程序集名称是:
POSLink,版本= 1.0.5773.36725,文化=中性,
PublicKeyToken = f3876d2e4b7eb819日志:绑定成功。 返回
从组装
C:\\ Users \\用户略\\桌面\\ notfoundexceptionexample \\调试\\ POSLink.dll。
日志:程序集在默认加载上下文中加载。

因此,事实证明,有一种方法可以过滤掉依赖行者告诉您的所有不重要的错误。

  1. 获得Dependency Walker
  2. 获取差异工具。 我使用WinMerge
  3. 在您的机器上有问题的dll上运行Dependency Walker。 将日志窗口的内容复制到文本文件并保存。
  4. 在有问题的机器上的有问题的dll上运行Dependency Walker。 将日志窗口的内容复制到文本文件并保存。
  5. 使用差异工具来差异两个txt文件。 在我的情况下,丢失的dll位于损坏机器的顶部(错误所在),ind位于底部机器(错误所在)中。

坦白说,我以前没有尝试过这个感到很尴尬。 根据我假设日志的布局方式,我只是假设错误的数量是相同的。


日志是在此屏幕截图中选择的中间窗口。

依赖行者日志

事实证明,确实缺少了msvcr120.dll,找到了一个合适的文件,然后将其放入我的输出目录中,从而解决了该问题。

注意: msvcr120.dll是Visual C ++ 2013运行时 正确的解决方案是安装Visual Studio 2013的Visual C ++可再发行组件包,而不是手动复制dll。

的WinMerge

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM