我以前也碰到过这个。我要做的第一件事是看看您是否可以从开发人员仪表板中获得任何崩溃信息。
其次,您是否正在使用第三方库(如SQLite )?有时,它们需要专门为环境构建,所以在发布时,请确保您构建的是ARM,而不是x86或任何CPU。这对我来说是个问题。我需要专门为ARM构建并完成使SQLite正常工作的过程。
关于共同问题,请参阅此链接:
https://support.microsoft.com/en-us/kb/2859130
已知以下问题只会导致应用程序在从Windows商店安装并在认证测试期间崩溃。当侧加载时,应用程序运行良好。
- 在Windows安装的应用程序中调用ScheduledActionService.LaunchForTest。确保发行版构建中不包含所有调试API(如ScheduledActionService.LaunchForTest )。否则,应用程序就会崩溃。
- 写入Windows安装应用程序中的InstalledLocation文件夹。不要写入提交认证的生产应用程序发行版中的InstalledLocation文件夹。这将导致应用程序崩溃。该文件夹在发布之前是可读的和可写的,但在已发布的应用程序中,该文件夹是只读的。但是,您可以读取并写入本地文件夹。有关详细信息,请参阅Windows的数据。
- 对硬编码产品id值的依赖项进行编码。在Marketplace部署应用程序之前,它的摄入过程会改变WMAppManifest.xml中的WMAppManifest.xml。也许您的应用程序对预先存在的ProductID有一定的依赖。例如,如果您的应用程序在字符串常量中有旧ProductID的硬拷贝。您的应用程序可能需要显式地打开WMAppManifest.xml,然后检查ProductID以获得正确的值。
- (仅适用于Windows 7)在仪表板中,检查已发布应用程序的功能列表,并确保Marketplace没有删除任何功能。这个问题可能会发生,因为Marketplace审计应用程序的各种方式,以确定需要什么功能。解决方案取决于缺少哪种功能。作为Windows 7的例子,要检测到MediaElement,它的名称需要存在于xaml本身(x: name )中。在这里可以找到更多关于功能的信息。
- 为x86而不是ARM提交XAP文件。确保您构建了针对设备的解决方案,而不是模拟器。模拟器编译到X86平台,而设备编译为ARM。在这种情况下,应用程序将无法进行测试。
- 应用程序不会加载低内存设备(512 MB - Windows 8)。查看故障是否特定于特定的手机型号或制造商。例如,确定问题是否与电话中可用的内存量有关。
- 如果应用程序没有通过认证,请确保参考故障报告中的“Windows”部分,以获得测试其应用程序的设备列表,以便尽可能在相同的设备上复制故障。
- 开发人员应注意证书测试报告中的失败原因注释,以查看该问题是否在Windows Phone 7、Windows Phone 8或两个平台上遇到,并确保您正在尝试在正确的设备/操作系统上复制。已知这些方案会导致Dev Center提交和/或运行时错误:
- 在将应用程序提交给Dev Center之前,不要运行Store。在Visual中,在“项目”菜单下,选择“打开存储测试工具包”。执行自动化和手动测试。作出任何必要的纠正。这里有更多的信息。
- 向Dev提交调试,而不是发布应用程序。确保在构建解决方案时,您是在发布模式(即不是调试模式)中这样做的。在Visual中,使用BUILD->Configuration…检查如果您上传了调试版本,您将在提交过程中得到静态验证错误,例如,如果应用程序包含本机代码。另外,由于额外的调试检查和诊断,调试构建通常会导致应用程序对最终用户运行得更慢。
- 确保XAP文件包含所需的所有DLL。例如,如果使用Windows工具包或其他第三方库,请确保对这些DLL的引用指示CopyLocal=true。您的XAP文件可以在项目的Bin/Release文件夹中找到。通过将副本从.XAP重命名为.ZIP来检查其内容,然后双击新命名的文件以检查其内容。您还可以使用第三方工具(如WinZip )检查它。
- 此外,在检查XAP时,请确保存在的所有DLL都是已知的、预期的DLL,并且这些DLL已被专门编译以用于特定版本的Windows Phone应用程序和构建环境。您可能需要启动一个干净的构建,以确保没有不必要的DLL。