【问题标题】:Why isn't a dll loading when I open my solution?为什么我打开解决方案时没有加载 dll?
【发布时间】:2011-02-25 07:44:22
【问题描述】:

我有一个包含几个产品的解决方案 (Visual Studio 2008)。其中一个产品包含一个需要加载 dll 的同事开发的控件。加载解决方案时必须加载 dll,以便我可以查看和使用控件。但是,我在错误窗口中收到错误消息,指出未定义控件。当我查看另一个安装了 VS 并使用此产品和 dll 的系统(Windows XP Pro)时,它工作正常。但是,当我尝试在我的系统(Windows 7)上加载它时,我得到了错误。

我在两个系统上都使用了 Process Explorer 来验证是否正在加载有问题的 dll。在一切正常的 XP 系统上,我可以看到所需的 dll 正在从 C:\windows\system32 加载。我的 dll 在我的 Windows 7 机器上的相同位置 (c:\windows\system32)。但是,当我在 Windows 7 机器上加载解决方案时,我可以通过 Process Explorer 看到 dll 没有加载。我知道 c:\windows\system32 在路径中,我可以看到来自 windows\system32 的其他 dll 已由 Visual Studio 可执行映像加载。为什么不加载这个dll? VS 中是否有一些日志记录机制会在加载时(当我加载包含控件的项目时)告诉我为什么 dll 不会加载?

这是 Windows 7 的事情吗?我不应该将开发的 dll 放在 windows/system32 中吗?

感谢您的帮助。 谢谢。

【问题讨论】:

  • 这可能是版本问题。也许您需要的版本不存在。确保产品所需的版本与您的开发机器上的版本相同。检查 XP Pro 机器上的版本与 win 7 机器上的版本。使用强命名程序集(我假设您的产品具有),版本是它所查找内容的描述的一部分。
  • 我无法从您的问题中判断这是本机 DLL 还是托管 DLL。您的目标是 .NET Framework 吗?您使用什么语言?

标签: visual-studio


【解决方案1】:

嗯,我唯一想到的是,如果 .dll 是 32 位的,而您正在制作 64 位的应用程序,它们可能不兼容。

【讨论】:

  • 这些肯定都是 32 位的。不涉及 64 位机器。
【解决方案2】:

我一直用来处理 dll 加载问题的一个方便技巧是打开融合日志记录。这样,加载异常将被记录到一个文件中,您可以在该文件中查看可能缺少的内容或框架正在探测的位置。

要打开它,请设置以下注册表项: HKLM\Software\Microsoft\Fusion\ForceLog 注册表值为 1,HKLM\Software\Microsoft\Fusion\LogPath 注册表值为 C:\FusionLogs(此路径必须存在)

更多信息: http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspxhttp://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.90).aspx

【讨论】:

  • 不错的链接。这是一个甜蜜的把戏。我把那个放在我的后兜里。 ;-P
  • 顺便说一句,这有点像我在他的问题中对他的评论中所表达的意思。 . .他说它没有加载。我的猜测是它不是 system32 目录中的正确版本。 . .
  • 当您说它不是“system32 目录中的正确版本”时,您是什么意思?哪个版本不对,你指的是哪个版本?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多