2014-02-13 59 views
11

我正在构建一个dll,它引用了第二个dll。我已经在第一个dll的项目中添加了第二个dll作为参考,前往Properties > Common Properties > Framework and References > Add New Reference > Browse无法加载文件或程序集系统找不到指定的文件

我从第三方的源代码编译了第二个dll。这两个项目都是C++/CLI。 每当我的主要应用程序试图调用一个函数,其中包含了对第二DLL的调用第1个DLL,我得到以下错误:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in Unknown Module.

Additional information: Could not load file or assembly 'NBIS, Version=1.0.5156.29834, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

我有第二个DLL在同一目录下复制我的主要的exe文件,而且我甚至尝试在第一个dll旁边保留一个副本,但都无济于事。

第二DLL引用几个静态库,但它包含唯一集引用是

System

System.Data

System.Drawing

System.XML

所有这一切,我已经添加为第1个DLL组件引用。

我能做些什么来让我的应用程序找到并加载第二个DLL?

+1

“或其依赖之一” –

+0

@HansPassant由于唯一的动态库引用是我列出的那些,不会表明这不是由于依赖? – duggulous

+0

这假定您知道nbis.dll的依赖关系。你不知道。供应商或作者知道。 –

回答

18

正如在评论中指出的,SysInternals'Process Monitor是一个诊断DLL解决问题的宝贵工具。告诉你什么时候第三方DLL有一个你不知道的依赖关系,还会告诉你Windows何时在硬盘驱动器的错误角落查找文件或发现错误的文件。

Loader snaps是Windows的内置诊断工具。但是Process Monitor更方便。

它确实会生成相当多的信息,从跟踪的底部开始或在恰当的时间启用跟踪。您经常需要使用其过滤工具来打开相关涓流中的排水管。值得花费时间弄清楚,这个工具属于任何程序员的黑带。

4

右键单击你创建的dll项目和新的引用项目,然后选择属性。 在应用程序下,检查目标框架并验证两者具有相同的框架,一些dll项目倾向于默认选择“客户端配置文件”版本的框架,这往往会给你现在有错误..

让我知道如果这不是问题..

+1

这两个项目都以.NET v4.5为目标,如下图所示: [dll1](http://ubuntuone.com/17dVhPyuIGaTtSBJla0xel) [dll2](http://ubuntuone.com/0YHXtKOvXuKnzwy8w4fbez) – duggulous

2

我的PowerShell ISE未作为管理员运行。这似乎是我的问题。

0

请更改您的应用程序池设置。
保持步骤:

  1. IIS管理器中打开
  2. 点击“应用程序池”(应用程序池列表)
  3. 选择您的应用程序池
  4. 右键单击应用程序池,然后选择“高级设置”
  5. 将“启用32位应用程序”从false更改为true。(当您创建应用程序池启用32位应用程序默认分配false)
相关问题