我正在构建一个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'或者one 它的依赖关系。系统找不到指定的文件。
我有一个与我的主exe在同一目录中的第二个dll的副本,我甚至尝试在第一个dll旁边保留一个副本,但无济于事。
第二个dll引用了几个静态库,但它包含的唯一程序集引用是
系统
System.Data
System.Drawing中
了System.XML
我在第一个dll中添加了所有这些作为程序集引用。
如何让我的应用程序找到并加载第二个dll?
答案 0 :(得分:23)
正如评论中所指出的,SysInternals'Process Monitor是诊断DLL解析问题的有用工具。当第三方DLL具有您不知道的依赖关系时告诉您,还告诉您Windows何时查找硬盘驱动器的错误角落或找到错误的文件。
Loader snaps是Windows的内置诊断工具。但Process Monitor更方便。
它确实会生成相当多的信息,从跟踪的底部开始或在恰当的时间启用跟踪。您经常需要使用其过滤工具将firehose转换为相关的涓流。值得花时间去弄清楚,这个工具属于任何程序员的黑带。
答案 1 :(得分:4)
右键单击您创建dll和新引用项目的项目,然后选择属性。 在Application下,检查目标框架并验证两者是否具有相同的框架,默认情况下,某些dll项目倾向于选择框架的“客户端配置文件”版本,这往往会给出您现在遇到的错误。
如果这不是问题,请告诉我。
答案 2 :(得分:2)
我的PowerShell ISE没有以管理员身份运行。这对我来说似乎是个问题。
答案 3 :(得分:0)
请更改您的应用程序池设置 保持步骤:
答案 4 :(得分:0)
对于警报错误(“系统找不到指定的文件。”)
右键单击[解决方案程序名称],然后选择Build Dependencies>,然后左键单击Build Customizations ...,然后选中{MASM},然后单击OK按钮。
右键单击[解决方案名称],然后单击“属性”,在“链接器”窗体上单击鼠标左键,在“链接器”中选择“调试”,在“调试”中单击“调试”,然后从“调试”中选择“调试程序集”将“调试程序集”的值转换为“是(/ ASSEMBLYDEBUG)”,形成“链接器”,选择“系统”,在“系统”上单击“系统”,然后从“系统”中选择“子系统”,并将“子系统”的值转换为“ Windows” (/ SUBSYSTEM:WINDOWS)”,左键单击“确定”按钮。
右键单击[解决方案名称],然后添加>新项目,“ C ++ File(.cpp)”更改名称或将“新项目”重命名为“ Main.asm”,然后单击“添加”按钮,右键单击[Main.asm],然后单击“属性”,从“常规”中选择“常规”,再选择“项目类型”,并将“项目类型”的值转换为“ Microsoft宏汇编程序”,然后单击确定按钮,然后单击“确定”。然后将您的汇编代码写入“ Main.asm”文件中,然后使用[[[[Debug]]]使用顶层屏幕程序“调试”工具栏中的“跳过=== F10”将其进行编码,所有有关如何使用汇编的信息“ Visual Studio 2017”中的代码。