【发布时间】:2023-03-15 03:33:01
【问题描述】:
我有一个直接引用 dll 文件的应用程序:POSLink.dll。
为了让它在我的本地机器上运行,我必须手动将以下 dll 复制到输出目录:libea32.dll 和 ssleay32.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 个错误,而且当我在成功的机器上运行它时它们也会出现。
我什至如何开始解决此错误?
当我运行 Fusion 日志查看器,然后在目标机器上运行应用程序时,我得到以下日志:
* 组装活页夹日志条目(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
--- 详细的错误日志如下。=== 预绑定状态信息 === LOG: DisplayName = POSLink, Version=1.0.5773.36725, Culture=neutral,
PublicKeyToken=f3876d2e4b7eb819(完全指定)日志:Appbase =
file:///C:/Users/Omitted/Desktop/notfoundexceptionexample/debug/ LOG:
初始 PrivatePath = NULL LOG:动态基础 = NULL LOG:缓存基础 =
NULL LOG:AppName = FileNotFoundExceptionExample.exe 调用程序集
: FileNotFoundExceptionExample,版本=1.0.0.0,文化=中性,
PublicKeyToken=null。
=== LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件:
C:\Users\Omitted\Desktop\notfoundexceptionexample\debug\FileNotFoundExceptionExample.exe.Config
LOG:使用主机配置文件:LOG:使用机器配置
文件来自
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。
LOG:程序集下载成功。正在尝试设置文件:
C:\Users\Omitted\Desktop\notfoundexceptionexample\debug\POSLink.dll
LOG:进入从源代码运行设置阶段。日志:程序集名称是:
POSLink,版本=1.0.5773.36725,文化=中性,
PublicKeyToken=f3876d2e4b7eb819 LOG:绑定成功。退货
组装自
C:\Users\Omitted\Desktop\notfoundexceptionexample\debug\POSLink.dll。
LOG:程序集在默认加载上下文中加载。
【问题讨论】:
-
查看 Fusion 日志查看器是否提供更多信息(确保以管理员身份运行)。它应该向您显示它为尝试定位您的 DLL 及其依赖项而探查的特定路径。 msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx
-
你的
using System.IO在哪里还要确保在项目的引用节点中你还手动为POSLink添加了必要的dll -
您是否在 exe 目录中找到了所有 DLL,或者您是否引用了 GAC 中的 DLL?
-
如果这是第 3 方 dll。 .also 确保
CopyLocal属性设置为true然后在部署应用程序时确保将 bin 文件夹中的所有 .dll 及其对应的 .config.exe 文件和实际复制到目标位置.exe 它是自己的。 -
@JeroenHeier 他们在exe目录下