我有一个包含几个产品的解决方案(Visual Studio 2008)。其中一个产品包含由同事开发的控件,需要加载dll。加载解决方案时必须加载DLL,以便我可以查看和使用该控件。但是,我在错误窗口中收到错误,说明控件未定义。当我查看已安装VS并使用此产品和DLL的另一个系统(Windows XP专业版)时,它可以正常工作。但是,当我尝试在我的系统(Windows 7)上加载它时,我得到了错误。
我在两个系统上都使用了Process Explorer来验证是否正在加载有问题的dll。在一切正常的XP系统上,我可以看到所需的dll是从C:\ windows \ system32加载的。我在Windows 7机器上的同一位置(c:\ windows \ system32)有dll。但是,当我在Windows 7上加载解决方案时,我可以通过Process Explorer看到dll没有加载。我知道c:\ windows \ system32在路径中,我可以看到来自windows \ system32的其他dll已被visual studio可执行映像加载。为什么这个dll不会加载? VS中是否有一些日志记录机制会在加载时(当我加载包含控件的项目时)告诉我为什么dll不会加载?
这是Windows 7吗?我不应该在windows / system32中放置一个开发的dll吗?
帮助表示赞赏。 感谢。
答案 0 :(得分:1)
嗯,我唯一想到的是.dll是32位而你正在制作一个64位应用程序,它们可能是不兼容的。
答案 1 :(得分:1)
我一直用来处理dll加载问题的一个方便的技巧是启用融合日志记录。这样,加载异常将记录到文件中,您可以在其中查看可能缺少的内容或框架正在探测的内容。
要启用它,请设置以下注册表项: HKLM \ Software \ Microsoft \ Fusion \ ForceLog注册表值为1,HKLM \ Software \ Microsoft \ Fusion \ LogPath注册表值为C:\ FusionLogs(此路径必须存在)
更多信息: http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx http://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.90).aspx