【发布时间】: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