2011-03-16 77 views
0

我有一个Visual Studio项目,其中包含许多商业DLL文件,这些文件在我的程序中使用。 我迄今为止使用了许多这些DLL文件,没有任何问题。我不得不使用另一个DLL文件。我将DLL文件作为引用链接(像往常一样),我可以看到它被添加到项目中,因为代码完成工作,我可以成功地构建项目。在模块中发生.NET异常(TypeLoadException)

但是,当我在目标PC上运行这个,我得到一个TypeLoadException。

A .NET exception (TypeLoadException) occured in the module 

我试图捕获和打印异常中的确切信息,但我根本没有帮助。

下面是完整的例外,我得到:

A .NET exception (TypeLoadException) occured in the module LightSwitch\nError message: Could not load type 'Backbone2.LightMode_Status_Ctr_1' from assembly 'Backbone2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.\nThrowing method: DiagModule.SetSwitch\n 

(我不能进行任何调试,并提供更多的信息,因为我建我的项目作为DLL,然后在目标计算机上使用,实际上我可以在PC上运行该程序,因为它缺少所有必需的硬件)

+0

你能编辑你的问题并添加整个错误和异常信息吗?另外,您可以通过此问题中的说明启用其他程序集加载器日志记录:http://stackoverflow.com/questions/255669/how-to-enable-assembly-bind-failure-logging-fusion-in-net – 2011-03-16 05:50:21

回答

1

感谢所有的答复,我设法找到了问题。 问题是该项目包含了不同文件夹中的不同版本的库文件(dll)。在运行时(仍然不知道为什么)一个dll文件将被选中,并且由于文件在不同版本之间不同,所以缺少一些方法。因此,将DLL文件更新到所有文件夹中的相同版本解决了问题。

0

检查DLL是否位于目标PC上的正确位置(或GAC中)。

+0

At这一点我已检查参考/地点吨次。 – theAlse 2011-03-16 05:51:13

1

检查该dll是否为与您的pc相同的架构而构建。我的意思是,如果你的电脑是64位,请确保dll是相对应的,反之亦然

+0

或将主.exe文件标记为“x86”而不是“AnyCPU”。这几乎总是修复DLL架构不匹配。 – 2011-03-16 05:53:35

+0

这会导致'BadImageException'。 – jgauffin 2011-03-16 06:11:04

+0

如果main是“x86”,并且您加载的所有dll都是“x86”或“Any CPU”,则不会得到'BadImageException'。 – ToolmakerSteve 2014-04-28 06:03:22

0

启动FusLogVw.exe - 它是.Net SDK的一部分,可以从VS 2010命令提示符启动。配置日志记录以记录所有故障。重现问题,刷新FusLogVw.exe窗口中的视图。你应该能够找到与你的问题相对应的记录,它会告诉你它到底在做什么,你应该能够找出如何纠正问题。

+0

我编辑了我的文章,这根本就不是possibe,因为我构建的dll只能在目标PC上运行。 – theAlse 2011-03-16 05:59:21

+0

您可以将FusLogVw.exe复制到目标PC并从那里运行? – 2011-03-16 06:29:04

+0

在目标PC上安装软件有很多限制。 – theAlse 2011-03-16 06:31:32

0

检查您是否引用DLL的一个版本,并在运行时加载另一个版本(来自GAC)。

+0

我该如何检查?我可以看到,我使用的所有DLL文件(所有工作的和有问题的)都具有与运行时版本和版本相同的属性。 – theAlse 2011-03-16 06:26:37