RELEASE构建安装CAB中的MissingMethodException

时间:2010-12-02 22:44:15

标签: windows-mobile compact-framework

我正在尝试为移动设备创建应用程序的设置CAB。我可以通过Visual Studio在模拟器上运行应用程序但是,当我尝试在模拟器上手动安装cab并运行程序时,会立即弹出错误消息“意外错误...”,单击它显示的详细信息我是程序的名称,然后是“MissingMethodException”,这就是全部,而不是关于在哪里查看的更多信息。

我实际上现在有两个安装项目。原始安装项目始终配置为显式引用“Debug Any CPU”输出,该输出现在仅在Debug配置中构建。现在,一个新的安装项目显式引用了“Relase Any CPU”输出,该输出仅构建在Release配置中。

这似乎只是发布版本中的一个问题,这有点令人担忧。我不希望将代码的调试版本发布到生产环境中。

配置加载程序应用程序后,我得到以下输出(名称空间名称已更改为保护无辜者)

此日志实际上与调试日志相同,直到该日志底部大约八行。

在调试日志中,加载System.Data.DataSetExtensions模块后,加载System.Xml.Linq模块,然后在日志结束时重定向后,从{{1开始加载一系列附加模块大约80行试图加载资源,然后加载Forms模块。

新尝试

在尝试构建自己的inf后,我仍然得到MissingMethodException但更详细。它抱怨它无法从我的一个程序集中加载特定类型。

由于我已经看到应用程序在发布模式下运行,我决定尝试复制已部署的程序集并使用它们来创建我的cab,这不起作用。然后我将组件与我最初用于创建驾驶室的组件进行比较,它们完全相同。

这让我相信,如果我尝试手动从设备手动运行部署的版本构建,我仍然会得到MissingMethodException,果然,情况确实如此。在这种情况下,虽然我得到未详解 MissingMethodException。

重申这一点我注意到当我在Visual Studio中点击“Start Debugging”并选择Release配置时,程序运行为例外,但如果我停止调试并尝试手动运行设备上部署的内容空的MissingMethodException。如果我对调试版本执行相同的操作,即在Visual Studio中“开始调试”,然后停止调试并从设备手动运行应用程序,则应用程序运行正常。

如果有人对这可能有什么想法,我将不胜感激。我很困惑。

2 个答案:

答案 0 :(得分:2)

Turn on the loader log在注册表中,看看它说的是无法加载。

修改

首先,我放弃了CAB项目 - 这个工具很糟糕,只是增加了方式,实际上是一个非常简单的创建CAB文件的过程。

您知道应用程序有效,因为您可以从调试器运行它。获取这些发布程序集并将它们放在一个文件夹中。创建an INF file(安装项目创建一个,因此您可以将其用作“种子”,如果您愿意)描述如何打包它们,然后manually run cabwiz.exe使用该INF(或创建BAT文件) ,这就是我们所做的。)

我多年前发现,这是创建可依赖的CAB的最简单方法,可重复且可自动化。 the MSDN article on the CAB project后我使用批处理文件和手动滚动的INF这一事实也很有说服力。

答案 1 :(得分:0)

如果我在DEBUG和RELEASE之间切换,CAB项目会给我带来问题。 查看cab项目中“文件”的属性。他们是否指向你的bin \ DEBUG或bin \ RELEASE?切换构建目标后,CAB项目不太适合切换。 在解决方案中使用共享项目时,这可能会导致MissingMethodException。

尝试为您要为其构建的模式重新创建CAB项目(DEBUG或RELEASE)。