我发布了一个在开发Windows Phone 8.1发布模式应用时遇到的问题。幸运的是,我能够解决问题,我想通过StackOverflow分享。
遇到的问题如下:
System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E) at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD) . . .
我尝试调试发布版本,禁用项目中的所有优化,但结果并不确定。我放在本机代码构造函数上的断点从未被调试器击中(我将调试切换到" Native Only"在Properties> Debug中)。
查看编译器和链接器设置并未显示任何异常情况。问题的原因是什么?
答案 0 :(得分:0)
抛出System.IO.FileNotFoundException的原因是因为要在发布模式下链接的库列表(链接器>输入>附加依赖项)包括SQLite3D.lib(SQLite库的调试版本)而不是SQLite。 lib(发布版本):
API.lib; Internals.lib; JSON.lib; sqlite3D.lib;%(AdditionalDependencies)
这足以阻止Windows Phone 8.1加载Windows运行时组件DLL以调用类构造函数。
解决方案是链接发布库而不是调试库:
API.lib; Internals.lib; JSON.lib; sqlite3.lib;%(AdditionalDependencies)
这解释了为什么应用程序在调试模式下完美运行。
我在C / C ++方面的经验告诉我,混合调试和发布库可能会有问题。一个例子是在发布模式DLL中分配内存并在调试模式DLL中释放内存,因为这里有两个不同的内存管理系统。手头的案例阐明了不混合发布和调试DLL /库的另一个原因。