无法加载文件或程序集系统找不到指定的文件

dug*_*ous 15 .net dll c++-cli visual-studio-2012

我正在构建一个dll,它引用了第二个dll.我已经在第一个dll的项目中添加了第二个dll作为参考Properties > Common Properties > Framework and References > Add New Reference > Browse

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

未知模块中出现未处理的"System.IO.FileNotFoundException"类型异常.

附加信息:无法加载文件或程序集'NBIS,Version = 1.0.5156.29834,Culture = neutral,PublicKeyToken = null'或其依赖项之一.该系统找不到指定的文件.

我有一个与我的主exe在同一目录中的第二个dll的副本,我甚至尝试在第一个dll旁边保留一个副本,但无济于事.

第二个dll引用了几个静态库,但它包含的唯一程序集引用是

系统

System.Data

System.Drawing中

了System.XML

我在第一个dll中添加了所有这些作为程序集引用.

我该怎么做才能让我的应用程序找到并加载第二个dll?

Han*_*ant 23

正如评论中指出的那样,SysInternals的Process Monitor是诊断DLL解析问题的有用工具.当第三方DLL具有您不知道的依赖关系时告诉您,还会告诉您Windows何时查找硬盘驱动器的错误角落或找到错误的文件.

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

它确实生成了大量信息,从跟踪底部开始或在恰当的时间启用跟踪.您经常需要使用其过滤工具将firehose转换为相关的涓流.值得花时间来弄明白,这个工具属于任何程序员的黑带.


小智 5

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

如果这不是问题,请告诉我。

  • 正如您在这些图像中看到的,这两个项目都针对 .NET v4.5:[dll1](http://ubuntuone.com/17dVhPyuIGaTtSBJla0xel) [dll2](http://ubuntuone.com/0YHXtKOvXuKnzwy8w4fbez) (2认同)