2010-12-10 154 views
23

我有很久以前创建的这个dll,用于连接到我开发的特定软件的db。我已经没有超过4年的问题和无数的应用程序与此DLL。无法加载文件或程序集“***。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说:警告:由于延迟加载相关模块中缺少导出功能,所以至少有一个模块具有未解析的导入。

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

线索谁?

编辑

这是总的错误消息:

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

没有在事件查看器中没有错误。

回答

18

我昨天遇到了与dll相同的问题,所有引用的都是System,System.Data和System.Xml。原来平台类型的构建配置没有对齐。这个dll是为x86编译的,使用它的程序是“Any CPU”,因为我运行的是x64机器,它运行的程序为x64,并且与x86 dll有问题。我不知道这是否是你的问题,只是认为我会提及它作为别的东西来检查。

+0

由于我在托管C++编写的“任何CPU”不存在。无论如何我检查了配置管理器,并且都是为Win32设置的,dll和app。由于我在32位构建它,我从我的Program Files(x86)文件夹运行它以避免64位问题。 ...所以我一直在研究这个,但我没有看到任何错误。哦,我试图部署的其中一个站点是32位机器。 – 2010-12-10 16:45:58

+0

有类似的问题。我读了你的答案,不能用VS界面改变它。所以我在文本编辑器中打开项目文件并手动将其更改为AnyCPU,并且它可以工作。即使VS界面接受值,因为它应该在第一位。 – 2013-04-15 11:39:13

4

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

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

+0

我看着事件查看器并发布了我完全获得的错误消息。事件查看器中没有显示。 – 2010-12-10 18:26:37

+1

你说它适用于开发机器,但不适用于部署机器。你是否正在部署dll的调试版本,并且在部署机器上没有调试库?搜索路径中是否有其他版本的connectionTo.dll或connectionToJobboss32.dll? – 2010-12-10 18:34:20

+0

我尝试了它的调试版本和发布版本。所有的都有相同的错误。我曾经得到MSVCR100.dll缺失错误。这是使用MS VC++创建的应用程序的可再发行库,但我现在将其与应用程序一起复制。我也用MSVCR100d.dll代替它,而不是复制调试版本。 – 2010-12-10 19:31:11

30

or one of its dependencies

这是通常的问题,您不能使用Fuslogvw.exe查看丢失的非托管DLL。最好的办法是运行SysInternals的ProcMon实用程序。你会看到它搜索DLL并没有找到它。 Dependency Walker中的Profile模式也可以显示它。

+1

您可以指出在ProcMon日志或Dependency Walker中寻找什么?我真的只看到两个公用事业中的成功。在ProcMon中,我确实看到了一些'找不到文件',但是他们立即在另一个路径中搜索同一个文件,并且获得成功。 – 2010-12-10 19:27:57

+0

您正在寻找合适的东西。令人失望的是,这通常是看到它的绝对方式。不知道,除了淹没在数据中。如果您需要另一组眼睛,可以保存跟踪并将其放在文件共享服务上。 – 2010-12-10 19:35:48

+1

在.NET项目的设置('Debug'选项卡)中设置'Working Directory'字段到我的程序依赖的所有DLL的目录为我解决了这个问题。 – MasterMastic 2013-03-23 17:16:39

6

我有同样的问题。对我而言,这是由我的机器上的本地IIS服务器中的默认设置引起的。所以,简单的方法来解决这个问题,是使用内置的Visual Studio开发服务器,而不是:)

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

2

此答案与OP的完全无关情况,并且对于其他人来说也是不太可能的情况,但为了以防万一它可以帮助某人......

在我的情况下,我得到“无法加载文件或程序集”System.Windows.Forms,Version = 4.0.0.0 ......”因为我已经拆卸和重新组装使用程序Ildasm.exe和ILAsm.exe从.NET Framework中的程序/ SDK版本2.切换到程序Ildasm.exe和ILAsm.exe从.Net框架/ SDK版本4固定问题。

(奇怪的是,尽管这样我做了什么可能看起来像一个明显的错误,没有工作,没有表明它有针对性的.Net 4时JetBrains公司dotPeek检查所产生的EXE文件。)

3

我最近遇到这个问题,该应用程序将在开发人员机器上运行良好,并选择其他机器,但不是最近安装的机器上。事实证明,它所使用的机器安装了Visual C++ 11 Runtime,而新安装的机器则没有。 添加的Visual C++ 11可再发行组件运行到固定的问题应用程序安装...

+1

请注意,有2个版本的Visual C++运行时:32和64位。确保安装它们两者。在我的情况下,只有64位软件包解决了这个问题。 – kDar 2014-03-27 08:01:37

0

1)从“外部对象\ ffmpeg的\ BIN”到你的项目的输出目录(其中可执行住宿)复制DLL文件; 2)确保您的项目为目标的x86(32位模式下运行)建。

Follow this thread for more

0

更简单的方法来确定哪些依赖本地DLL已经是使用的Dependency Walker - http://www.dependencywalker.com/

我分析了原生的DLL,发现它取决于MSVCR120.DLL和MSVCP120.DLL,这两个都没有安装在System32目录中的临时服务器上。我在登台服务器上安装了C++运行库,问题已解决。

1

我有同样的问题 - 一个.dll所有的工作时间,然后我的电脑死机了,后来我有这个问题“无法加载文件或程序.... DLL”

两个可能的解决方案:当电脑死机时可能会出现一些不一致的文件

C:\Users\<yourUserName>\AppData\Local\Temp\Temporary ASP.NET Files 

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

有一次,我也删除我的包文件夹(我已经读了别的地方)。允许Visual Studio/nuget安装缺少的软件包(或手动重新安装),之后一切都很好。

相关问题