简体   繁体   English

UWP App FileLoadException WindowsRuntime仅在移动设备上发生

[英]UWP App FileLoadException WindowsRuntime only occurs on mobile

I've been having trouble with my app after deploying the store generated bundles onto my Windows 10 Mobile device. 将商店生成的捆绑包部署到Windows 10移动设备后,我的应用程序一直遇到麻烦。 I also uploaded this to the app store review team but they are constantly seeing a crash. 我还将此内容上传到了应用商店审核小组,但他们经常看到崩溃。 So I created a blank project to try and find out what the issue was. 因此,我创建了一个空白项目,试图找出问题所在。

The blank app just contains a function to try and find a folder using the StorageFolder API. 空白应用程序仅包含使用StorageFolder API尝试查找文件夹的功能。 If it doesn't exists then it just displays a message saying it wasn't found. 如果不存在,则仅显示一条消息,指出未找到。 I also surround this function with a try/catch because I believe this area of the code is the culprit of my problems. 我还将这个功能与try / catch一起使用,因为我相信这段代码是造成问题的根源。

Here is the blank project on Github: https://github.com/cmakthat/MobileCrashTesting 这是Github上的空白项目: https : //github.com/cmakthat/MobileCrashTesting

Here are the generated bundles from Visual Studio: https://1drv.ms/f/s!Anec4-FVkNsbhdtfR82xskiDviPW6g 以下是从Visual Studio生成的捆绑包: https : //1drv.ms/f/s!Anec4-FVkNsbhdtfR82xskiDviPW6g

More specifically, here is the code too: 更具体地说,这也是代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Storage;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace MobileTestingCrash
{
    /// <summary>
    /// Provides application-specific behavior to supplement the default Application class.
    /// </summary>
    sealed partial class App : Application
    {
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            this.InitializeComponent();
            this.Suspending += OnSuspending;

            try
            {

                deleteTempClips();
            }
            catch(Exception ex)
            {
                MessageDialog dia = new MessageDialog("App init exception: " + ex.ToString());
                dia.ShowAsync();
            }
        }

        public static async void deleteTempClips()
        {
            StorageFolder storageFolder = ApplicationData.Current.LocalFolder;

            IStorageItem storageItem = await storageFolder.TryGetItemAsync("Temp");

            if ( storageItem == null )
            {
                MessageDialog dia = new MessageDialog("Item never found");
                dia.ShowAsync();
            }
            return;
        }

        /// <summary>
        /// Invoked when the application is launched normally by the end user.  Other entry points
        /// will be used such as when the application is launched to open a specific file.
        /// </summary>
        /// <param name="e">Details about the launch request and process.</param>
        protected override void OnLaunched(LaunchActivatedEventArgs e)
        {
            Frame rootFrame = Window.Current.Content as Frame;

            // Do not repeat app initialization when the Window already has content,
            // just ensure that the window is active
            if (rootFrame == null)
            {
                // Create a Frame to act as the navigation context and navigate to the first page
                rootFrame = new Frame();

                rootFrame.NavigationFailed += OnNavigationFailed;

                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
                {
                    //TODO: Load state from previously suspended application
                }

                // Place the frame in the current Window
                Window.Current.Content = rootFrame;
            }

            if (e.PrelaunchActivated == false)
            {
                if (rootFrame.Content == null)
                {
                    // When the navigation stack isn't restored navigate to the first page,
                    // configuring the new page by passing required information as a navigation
                    // parameter
                    rootFrame.Navigate(typeof(MainPage));
                }
                // Ensure the current window is active
                Window.Current.Activate();
            }
        }

        /// <summary>
        /// Invoked when Navigation to a certain page fails
        /// </summary>
        /// <param name="sender">The Frame which failed navigation</param>
        /// <param name="e">Details about the navigation failure</param>
        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
        }

        /// <summary>
        /// Invoked when application execution is being suspended.  Application state is saved
        /// without knowing whether the application will be terminated or resumed with the contents
        /// of memory still intact.
        /// </summary>
        /// <param name="sender">The source of the suspend request.</param>
        /// <param name="e">Details about the suspend request.</param>
        private void OnSuspending(object sender, SuspendingEventArgs e)
        {
            var deferral = e.SuspendingOperation.GetDeferral();
            //TODO: Save application state and stop any background activity
            deferral.Complete();
        }
    }
}

Here's the rundown when deploying to my Windows 10 Mobile device: 这是部署到Windows 10移动设备时的概要:

  • Deploy in debug mode on Visual Studio: Works 在Visual Studio上以调试模式进行部署:Works
  • Deploy in release mode on Visual Studio: Works 在Visual Studio上以发布模式进行部署:Works
  • Deploy the "_Test" bundle: Works 部署“ _Test”捆绑包:Works
  • Deploy the "appxupload" bundle within it: FileLoadException 在其中部署“ appxupload”捆绑包:FileLoadException

The FileLoadException I am getting is shown in this image: 我得到的FileLoadException如下图所示: FileLoadException图片

So now I'm at a lost on what to do. 所以现在我迷茫了。 I can't get my app approved by the store because of this blocker. 由于存在该阻止程序,我无法使应用获得商店的认可。 My original project was working a few weeks ago, but now suddenly I'm starting to get these crashes and I haven't changed anything major. 我最初的项目是在几周前开始工作的,但现在突然间我开始遇到这些崩溃,而且我没有做任何重大更改。 Any ideas? 有任何想法吗?

Deploy the "appxupload" bundle within it: FileLoadException 在其中部署“ appxupload”捆绑包:FileLoadException

You can't deploy the appxupload into mobile directly. 您无法将appxupload直接部署到移动设备中。 Because the appxupload file is not complete. 因为appxupload文件不完整。 You could verify this via modify the appxupload file suffix name to zip and explore it. 您可以通过将appxupload文件后缀名称修改为zip并进行浏览来验证这一点。 It contain two files, appxbundle file and appxsym file. 它包含两个文件, appxbundle文件和appxsym文件。

在此处输入图片说明

And the appxsym will be used when appxupload file upload to store. appxsym时,将使用appxupload文件上传到店。 It will make complete appxbundle file after store cloud compilation. 商店云编译后,它将制作完整的appxbundle文件。 And the complete file is equal to _Test bundle that described in your case. 完整的文件等于您所描述的_Test捆绑包。

在此处输入图片说明

So, It is not a good practice that Deploy the "appxupload" bundle . 因此, 部署“ appxupload”捆绑包不是一个好习惯。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM