无法加载文件或程序集“***。dll”或其中一个依赖项

时间:2010-12-10 16:30:10

标签: .net dll reference dependencies managed-c++

我有很久以前创建的这个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显示一切正常。

运行depends.exe说:警告:由于延迟加载相关模块中缺少导出功能,至少有一个模块有未解析的导入。

我已经尝试重写整个事情了。这产生了相同的结果。

线索任何人?

EDITS

以下是总错误消息:

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\"
----------------------------------------\"

事件查看器中没有错误。

9 个答案:

答案 0 :(得分:35)

  

或其中一个依赖项

这是常见问题,您无法通过Fuslogvw.exe看到丢失的非托管DLL。最好的办法是运行SysInternals的ProcMon实用程序。你会看到它搜索DLL而不是找到它。 Dependency Walker中的配置文件模式也可以显示它。

答案 1 :(得分:18)

我昨天遇到了与dll相同的问题,所有引用的内容都是System,System.Data和System.Xml。原来,Platform类型的构建配置没有排队。 dll是为x86构建的,使用它的程序是“任何CPU”,因为我正在运行x64机器,它运行程序为x64并且与x86 dll有问题。我不知道这是不是你的问题,只是认为我会把它作为别的东西来检查。

答案 2 :(得分:6)

我遇到了同样的问题。对我来说,这是由我机器上本地IIS服务器的默认设置引起的。因此,解决它的简单方法是使用内置的Visual Studio开发服务器:)

x64计算机上的较新IIS版本具有默认情况下不允许32位应用程序运行的设置。要在本地IIS中启用32位应用程序,请在IIS管理器中选择相关的应用程序池,单击“高级设置”,然后将“启用32位应用程序”从False更改为True

答案 3 :(得分:5)

我最近遇到了这个问题,该应用程序可以在开发者计算机上正常运行并选择其他计算机,但不会在最近安装的计算机上运行。事实证明,它所运行的机器安装了Visual C ++ 11 Runtime,而新安装的机器却没有。 将Visual C ++ 11 Runtime可再发行组件添加到应用程序安装程序修复了问题 ...

答案 4 :(得分:4)

我最近碰到了这个。事实证明,旧的DLL是使用以前的版本(Visual Studio 2008)编译的,并且正在引用该版本的动态运行时库。我试图在一个只有.NET 4.0的系统上运行它,我从未安装任何动态运行时库。解决方案?我重新编译了DLL以链接静态运行时库。

在事件查看器(EVENTVWR.EXE)中检查应用程序错误日志。它将为您提供有关错误的更多信息,并可能为您指出问题的真正原因。

答案 5 :(得分:2)

这个答案与OP的情况完全无关,对其他人来说也是一个非常不可能的场景,但以防万一它可以帮助某人......

在我的情况下,我得到“无法加载文件或程序集'System.Windows.Forms,Version = 4.0.0.0 ...”因为我已经使用ILDAsm.exe和ILAsm.exe对程序进行了反汇编和重新组装。 Net Framework / SDK版本2.从.Net Framework / SDK版本4切换到ILDAsm.exe和ILAsm.exe修复了该问题。

(奇怪的是,尽管我做的事情似乎是一个明显的错误,但是生成的EXE文件无法正常工作,表明它在使用JetBrains dotPeek进行检查时会以.Net 4为目标。)

答案 6 :(得分:1)

我遇到了同样的问题 - .dll一直在工作,然后我的计算机崩溃了,之后我遇到了无法加载文件或程序集的问题.... dll'

两种可能的解决方案:当计算机崩溃时,

中可能存在一些不一致的文件
C:\Users\<yourUserName>\AppData\Local\Temp\Temporary ASP.NET Files

删除该文件夹,重新编译并且错误消失了。

一旦我还要删除我的包文件夹(我已经在其他地方读过)。允许Visual Studio / nuget安装丢失的包(或手动重新安装),之后一切都很好。

答案 7 :(得分:0)

1)将DLL从“Externals \ ffmpeg \ bin”复制到项目的输出目录(可执行文件所在的位置); 2)确保您的项目是为x86目标构建的(以32位模式运行)。

Follow this thread for more

答案 8 :(得分:0)

遇到相同的问题,并通过确保解决方案中的项目具有相同的配置和平台(在我的情况下为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