【问题标题】:Why can't my .NET CF application find a DLL In the same directory as the executable?为什么我的 .NET CF 应用程序在与可执行文件相同的目录中找不到 DLL?
【发布时间】:2010-11-26 19:38:49
【问题描述】:

我有一个多年来运行良好的 .NET CF 1.1 应用程序。有时,我会收到带有以下错误消息(通用)的帮助台票:

找不到方法: 方法名 程序集命名空间.类

DLL 在那里,它与我的其他设备的版本相同。有什么可以改变的会使它找不到方法。此错误是否意味着程序集已加载,或者它是否在此之前中断?

我如何在 Visual Studio(2003,顺便说一句)中添加引用是否重要?我将 Copy Local 设置为 true,因此我假设它需要与我的可执行文件位于同一目录中。

感谢您提供的任何帮助。谢谢。

编辑:我相信这个 DLL 也在设备的 windows 目录中,可能是不同的版本。它包含很多硬件特定的功能(即背光、键盘状态等)

【问题讨论】:

  • "Method not found" 是 DLL Hell 问题。

标签: c# .net assemblies .net-1.1 compact-framework


【解决方案1】:

不,在 Visual Studio 2003 中如何添加引用并不重要。(100% 确定)
现在不太确定:我认为其他人在手机的 GAC 中有相同的程序集。因此 GAC 程序集被调用,而不是您部署的程序集,并且该版本的程序集缺少请求的功能。

【讨论】:

  • 哈哈...在您回答时编辑了我的问题。如果是这种情况,我如何强制它加载我知道是正确的?
  • 在那个注释上......为什么它有时只这样做?我会假设它在每台设备上都经过 GAC...
  • 查看 stackoverflow.com/questions/49972/… 了解搜索程序集的顺序。
    无论如何,其他一些软件可能正在更新它。在某些手机上,该软件就在那里。其他人则不然。
  • 那么,如果我在调用任何方法之前执行了一个 assembly.loadfrom(),那会加载我想要的那个吗?
  • 应该解决问题。但为了安全起见,最好使用版本和公钥令牌请求所需的程序集版本。
【解决方案2】:

取决于您在代码中引用文件的方式。您可能依赖于当前的工作目录,这取决于应用程序的启动方式或之后的操作,它可能不是您期望的那样。

【讨论】:

    【解决方案3】:

    有时 .NetCf 会在设备内存不足时抛出此异常,而不是预期的“内存不足”异常。我在使用 P/Invoke 加载本机 dll 时比加载纯 netcf dll 更频繁地观察到这种行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 2017-11-28
      • 2014-03-19
      相关资源
      最近更新 更多