【问题标题】:Why will my application not load DLLs on first launch, but fine there after?为什么我的应用程序不会在第一次启动时加载 DLL,但之后就可以了?
【发布时间】:2014-09-18 16:11:02
【问题描述】:

我为移动设备创建了一个适用于 Windows CE 的应用程序。当我从 VS 调试应用程序时,应用程序加载并运行良好。但是,当我为安装构建 CAB 文件时,它不会。安装后第一次启动应用程序时,它会引发“TypeLoadException”。但是,当我再次尝试时,它工作正常。

当我第一次尝试从应用程序访问 DLL 时,它会引发错误。

我想发布你们需要的尽可能多的代码,但是我有点不确定什么是相关的。这是我用 CABWIZ.exe 制作 CAB 文件的 INF 文件:

[Version]
Signature="$Windows NT$"
Provider="Y"
CESignature="$Windows CE$"

[CEStrings]
AppName="ShoePDA"
InstallDir="\Backup\XClient"

[Strings]
Manufacturer="Y"

[CEDevice]
VersionMin=4.0
VersionMax=6.99
BuildMax=0xE0000000

[DefaultInstall]
CEShortcuts=Shortcuts
AddReg=RegKeys
CopyFiles=Files.Common1,Files.Common2,Files.Common3,Files.Common4,Files.Common5,Files.Common6,Files.Common7

[SourceDisksNames]
1=,"Common1",,"C:\Users\akj\Documents\Udvikling\SVN\X\Trunk\Lib\"
2=,"Common2",,"C:\Users\akj\Documents\Udvikling\SVN\X\Trunk\Lib\"
3=,"Common3",,"C:\Users\akj\Documents\Udvikling\SVN\X\Trunk\Lib\"
4=,"Common4",,"C:\Users\akj\Documents\Udvikling\SVN\X\Trunk\Lib\"
5=,"Common5",,"C:\Users\akj\Documents\Udvikling\SVN\X\Trunk\Lib\"
6=,"Common6",,"C:\Users\akj\Documents\Udvikling\SVN\X\Trunk\Lib\"
7=,"Common7",,"C:\Users\akj\Documents\Udvikling\SVN\X\Trunk\ShoePDA2\obj\Release\"

[SourceDisksFiles]
"OpenNETCF.Net.dll"=1
"OpenNETCF.Windows.Forms.dll"=2
"OpenNETCF.WindowsCE.dll"=3
"OpenNETCF.dll"=4
"datalogic.device2008.dll"=5
"datalogic.wireless2008.dll"=6
"X.exe"=7

[DestinationDirs]
Shortcuts=0,%CE2%\Start Menu
Files.Common1=0,"Backup\XClient"
Files.Common2=0,"Backup\XClient"
Files.Common3=0,"Backup\XClient"
Files.Common4=0,"Backup\XClient"
Files.Common5=0,"Backup\XClient"
Files.Common6=0,"Backup\XClient"
Files.Common7=0,"Backup\XClient"

[Files.Common1]
"OpenNETCF.Net.dll","OpenNETCF.Net.dll",,0

[Files.Common2]
"OpenNETCF.Windows.Forms.dll","OpenNETCF.Windows.Forms.dll",,0

[Files.Common3]
"OpenNETCF.WindowsCE.dll","OpenNETCF.WindowsCE.dll",,0

[Files.Common4]
"OpenNETCF.dll","OpenNETCF.dll",,0

[Files.Common5]
"datalogic.device2008.dll","datalogic.device2008.dll",,0

[Files.Common6]
"datalogic.wireless2008.dll","datalogic.wireless2008.dll",,0

[Files.Common7]
"X.exe","X.exe",,0


[Shortcuts]

[RegKeys]

非常感谢您的帮助!

【问题讨论】:

  • 所以我的第一个问题是......文件路径的存在方式与您在目标设备上的方式完全相同吗?在您的本地工作的不一定适用于目标路径,特别是如果文件路径不存在..这是我最好的猜测,这也是TypeLoadException is thrown when the common language runtime cannot find the assembly, the type within the assembly, or cannot load the type.可能发生的其他事情
  • DLL 的放置方式与 VS 的放置方式相同。文件路径在 VS 中和使用 CAB 文件安装后看起来相同。奇怪的是,我第一次尝试启动它时它就在线。如果我在第一次工作后立即再做一次。
  • 这很奇怪。 .发生了一些不同的事情,只是尝试添加一些日志记录并进行反向消除过程,我认为这将帮助您缩小范围。从编码的角度来看,这可能是一项任务,但可能会帮助您缩小问题范围。跨度>
  • 如果在安装后但在第一次运行程序之前进行热重置会发生什么?这能解决问题吗?
  • 同样的事情。我尝试捕获 TypeLoadException,然后从代码中热启动设备。然而,它只是在调用另一个 dll 时引发了异常,所以不是解决方案。不过我确实解决了。我更新了我正在使用的 API dll.. 在我看来很奇怪,因为调试时没有问题..

标签: c# dll windows-ce cab


【解决方案1】:

这是一个非常奇怪的错误。我通过更新我正在使用该设备的 API DLL 解决了这个问题。很奇怪,调试的时候没有出现这个错误。哦,好吧,估计解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2021-11-16
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多