2014-09-18 3 views
0

모바일 장치 용 Windows CE 용 응용 프로그램을 만들었습니다. VS에서 응용 프로그램을 디버깅 할 때 응용 프로그램이로드되어 정상적으로 실행됩니다. 그러나 설치를 위해 CAB 파일을 빌드 할 때 그렇지 않습니다. 설치 후 응용 프로그램을 처음 실행하면 "TypeLoadException"이 발생합니다. 그러나 다시 시도하면 정상적으로 작동합니다.왜 내 응용 프로그램은 처음 실행될 때 DLL을로드하지 않지만 이후에는 정상적으로로드합니까?

응용 프로그램에서 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] 

감사합니다. 도움을 받으러 대단히 감사합니다!

+0

내 첫 번째 질문은 .. 파일 경로가 정확히 대상 장치에있는 것과 같은 방식으로 존재합니까? 귀하의 지역에서 작동하는 것은 반드시 대상 경로에서 작동하지 않을 것입니다 특히 파일 경로가 존재하지 않는 경우 .. 이것은 내 생각에 다른 일이 될 수 있습니다. '공용 언어 런타임에서 찾을 수 없을 때 TypeLoadException이 발생합니다. 조립품, 어셈블리 내의 유형 또는 타입을로드 할 수 없습니다. ' – MethodMan

+0

DLL은 VS가 수행하는 것과 같은 방식으로 배치됩니다. 파일 경로는 VS 및 CAB 파일로 설치 한 후에 동일하게 나타납니다. 그리고 이상한 부분은 온라인으로 시작할 때 trykt를 실행하는 것입니다. 처음으로 다시 한 번 해보면 작동합니다. – FirstHorizon

+0

이상한입니다. . 어떤 다른 로깅을 추가하려고 시도하고 제거 프로세스를 역으로 수행합니다.이 방법이 범위를 좁히는 데 도움이 될 것이라고 생각합니다. 코딩 관점에서 작업하는 것이지만 아마도 문제의 범위를 좁히는 데 도움이 될 것입니다. – MethodMan

답변

0

이것은 매우 이상한 오류입니다. 나는이 장치를 사용하고 있던 API DLL을 업데이트함으로써이를 해결했다. 디버깅 할 때 오류가 발생하지 않았을 때 매우 불쌍했습니다. 오, 잘 생각해 봅시다.