Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法加载文件或程序集';XXXX.dll';或者它的一个依赖项。找不到指定的模块_C#_Dll - Fatal编程技术网

C# 无法加载文件或程序集';XXXX.dll';或者它的一个依赖项。找不到指定的模块

C# 无法加载文件或程序集';XXXX.dll';或者它的一个依赖项。找不到指定的模块,c#,dll,C#,Dll,我有一个直接引用dll文件的应用程序:POSLink.dll 为了在我的本地机器上运行,我必须手动将以下dll复制到输出目录:libea32.dll和ssleay32.dll 当我在本地机器上运行应用程序时,它会成功 在目标计算机上运行应用程序时,出现以下错误: 未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“POSLink.dll”或其依赖项之一。找不到指定的模块。 位于FileNotFoundExceptionExample.Program

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

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

当我在本地机器上运行应用程序时,它会成功

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

未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“POSLink.dll”或其依赖项之一。找不到指定的模块。
位于FileNotFoundExceptionExample.Program.Main(字符串[]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上使用它,但这对我来说不是很有用,因为有381个错误出现,当我在成功的机器上运行它时也会出现

我该如何开始对此错误进行故障排除


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

*装配活页夹日志条目(2016年7月19日下午2:18:48)*

手术是成功的。绑定结果:hr=0x0。操作
已成功完成

从加载的程序集管理器:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll运行于
可执行文件
C:\Users\employed\Desktop\notfoundexceptionexample\debug\FileNotFoundExceptionExample.exe
---下面是详细的错误日志

===预绑定状态信息===日志:DisplayName=POSLink,版本=1.0.5773.36725,区域性=中性,
PublicKeyToken=f3876d2e4b7eb819(完全指定)日志:Appbase=
file:///C:/Users/Omitted/Desktop/notfoundexceptionexample/debug/ 日志:
初始PrivatePath=NULL LOG:Dynamic Base=NULL LOG:Cache Base=
空日志:AppName=FileNotFoundExceptionExample.exe调用程序集
:FileNotFoundExceptionExample,版本=1.0.0.0,区域性=中性,
PublicKeyToken=null。
==日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:
C:\Users\employed\Desktop\notfoundexceptionexample\debug\FileNotFoundExceptionExample.exe.Config
日志:使用主机配置文件:日志:使用计算机配置
文件来自
C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
日志:发布策略参考:POSLink,版本=1.0.5773.36725,
区域性=中性,PublicKeyToken=f3876d2e4b7eb819日志:GAC查找为
不成功的日志:正在尝试下载新URL
file:///C:/Users/Omitted/Desktop/notfoundexceptionexample/debug/POSLink.DLL.
日志:程序集下载成功。正在尝试设置文件:
C:\Users\employed\Desktop\notfoundexceptionexample\debug\POSLink.dll
日志:进入从源代码运行安装阶段。日志:程序集名称为:
POSLink,版本=1.0.5773.36725,文化=中性,
PublicKeyToken=f3876d2e4b7eb819日志:绑定成功。返回值

C:\Users\employed\Desktop\notfoundexceptionexample\debug\POSLink.dll。
日志:在默认加载上下文中加载程序集


因此,事实证明,有一种方法可以过滤掉dependency walker告诉您的所有不重要的错误

  • 获得
  • 获取一个diff工具。我用过
  • 在您的好机器上的有问题的dll上运行Dependency walker。将日志窗口的内容复制到文本文件并保存
  • 在坏机器上的有问题的dll上运行Dependency walker。将日志窗口的内容复制到文本文件并保存
  • 使用diff工具来区分这两个txt文件。在我的例子中,丢失的dll位于坏机器的顶部(错误在那里),ind位于好机器的底部(非错误在那里)
  • 坦白地说,我很尴尬,我以前没有尝试过这个。我只是根据日志的布局假设错误的数量是相同的


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

    事实证明,msvcr120.dll确实是缺少的,找到了一个合适的msvcr120.dll,并将其放到我的输出目录中修复了问题

    注意:。正确的解决方案不是手动复制DLL,而是安装


    查看Fusion日志查看器是否提供了更多信息(请确保以管理员身份运行)。它应该向您显示它为尝试定位DLL及其依赖项而探测的特定路径。您的
    在哪里使用System.IO
    还要确保在项目的“引用”节点中,您还手动为
    POSLink
    添加了必要的dll您是否在exe目录中找到了所有dll,或者您是否引用了GAC中的dll?如果这是第三方dll。还要确保
    CopyLocal
    属性设置为
    true
    ,然后在部署应用程序时,确保将bin文件夹中的所有.dll及其相应的.config.exe文件和实际的.exe文件复制到目标位置。@JeroenHeier它们位于exe目录中