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

问题描述 投票:0回答:5

我正在构建一个 dll,它引用第二个 dll。我已通过转到

Properties > Common Properties > Framework and References > Add New Reference > Browse

添加第二个 dll 作为第一个 dll 项目中的引用

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

“System.IO.FileNotFoundException”类型的未处理异常 发生在未知模块中。

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

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

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

系统

系统.数据

系统.绘图

系统.XML

我已将所有这些添加为第一个 dll 中的程序集引用。

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

.net visual-studio-2012 dll c++-cli
5个回答
37
投票

正如评论中所指出的,SysInternals 的 Process Monitor 是诊断 DLL 解析问题的宝贵工具。当第 3 方 DLL 具有您不知道的依赖项时,会告诉您;当 Windows 在硬盘驱动器的错误角落中查找文件或找到错误的文件时,也会告诉您。

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

它确实会生成相当多的信息,从跟踪的底部开始或在正确的时间启用跟踪。你经常需要使用它的过滤工具来将消防水带变成相关的细流。值得您花一小时来弄清楚,这个工具属于任何程序员的黑带。


6
投票

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

如果这不是问题请告诉我..


3
投票

我的 PowerShell ISE 未以管理员身份运行。这对我来说似乎是个问题。


0
投票

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

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

0
投票

对于警报错误(“系统找不到指定的文件。”)

  1. 右键单击 [解决方案程序名称],然后选择“构建依赖项”>,然后左键单击“构建自定义”...,然后选中复选框 {MASM},然后单击“确定”按钮。

  2. 右键单击[解决方案名称],然后左键单击属性,左键单击“链接器”形式“链接器”选择“调试”左键单击“调试”从“调试”中选择“调试程序集”并转换的值“调试程序集”为“是(/ ASSEMBLYDEBUG)”,在“链接器”中选择“系统”,在“系统”中左键单击“系统”,选择“子系统”并将“子系统”的值转换为“Windows(/ SUBSYSTEM: WINDOWS)”,左键单击“确定”按钮。

  3. 右键单击[解决方案名称],然后添加>新项目,“C++ File(.cpp)”更改名称或将“新项目”重命名为“Main.asm”,然后左键单击添加按钮,右键单击[ Main.asm] 然后左键单击“属性”,从“常规”中选择“常规”,选择“项目类型”,并将“项目类型”的值转换为“Microsoft Macro Assembler”,左键单击“确定”按钮,然后编写程序集“Main.asm”文件中的代码,然后 [[[Debug]]] 它使用顶部屏幕程序上“调试”工具栏中的“step over === F10”,所有这些都是关于如何在“Visual工作室2017”。

© www.soinside.com 2019 - 2024. All rights reserved.