C# UWP应用程序发布版本挂起在启动屏幕上?

C# UWP应用程序发布版本挂起在启动屏幕上?,c#,windows-10,C#,Windows 10,调试版本(86、64、ARM)都可以正常工作,发布版本可以正常构建,但当它们运行时,我的应用程序窗口将打开并保持空白(白色背景)。我在输出中看到的唯一错误是: ...PDB file was not present when IL code was compiled to native. 我不确定丢失的.pdb文件是否是罪魁祸首-很确定不是,因为它们只是为了调试目的,对吗? 无论如何,这是我第一次尝试为Windows应用商店准备UWP应用程序,但不完全确定我是否需要做任何特殊的事情,比如在我

调试版本(86、64、ARM)都可以正常工作,发布版本可以正常构建,但当它们运行时,我的应用程序窗口将打开并保持空白(白色背景)。我在输出中看到的唯一错误是:

 ...PDB file was not present when IL code was compiled to native.
我不确定丢失的.pdb文件是否是罪魁祸首-很确定不是,因为它们只是为了调试目的,对吗? 无论如何,这是我第一次尝试为Windows应用商店准备UWP应用程序,但不完全确定我是否需要做任何特殊的事情,比如在我自己的计算机上测试发布版本

<>编辑1:谢谢你的建议,手动卸载应用程序有时会让我通过空白窗口来加载应用程序条,但是当它不在飞溅屏幕上时,我会得到这些错误:

,,

我没有对启动屏幕做任何特殊的操作,使用清单中的内置工具加载了我的所有可视化资产,也没有从默认值修改App.xaml.cs。这是我的主页。cs:

 using Sublist.Classes;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using Windows.UI.Xaml;
 using Windows.UI.Xaml.Controls;
 using Windows.UI.Xaml.Navigation;

 namespace Sublist
 {

public sealed partial class MainPage : Page
{
    const string TAG = "MainPage: ";

    // for loading and saving user data and settings
    public static DataHandler dataHandler;

    public static MasterList<Entry> masterList;
    //public static int listViewSelectedIndex = -1;

    public MainPage()
    {
        this.InitializeComponent();

        dataHandler = new DataHandler(this);
        masterList = new MasterList<Entry>();

        // load user data
        if (dataHandler.userDataList != null)
            masterList = dataHandler.userDataList;

        masterList.UpdateListView(this);
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        dataHandler.LoadUserSettings();
    }


    private void AppBarAdd_Click(object sender, RoutedEventArgs e)
    {
        masterList.AddRow(this);
    }

    private void AppBarRemove_Click(object sender, RoutedEventArgs e)
    {
        if (!(mainListView.SelectedIndex < 0))
        {
            masterList.RemoveRow(this);
        }
    }

    private void AppBarMoveDown_Click(object sender, RoutedEventArgs e)
    {

    }

    private void AppBarMoveUp_Click(object sender, RoutedEventArgs e)
    {

    }

    private void AppBarIndent_Click(object sender, RoutedEventArgs e)
    {
        // indent the row control if currently selected index is a list view item
        if (-1 < mainListView.SelectedIndex && mainListView.SelectedIndex < mainListView.Items.Count)
        {
            // but don't allow more than one indent past above row's indent level
            RowControl rc = (RowControl)mainListView.Items[mainListView.SelectedIndex];
            int indexMinus1 = mainListView.SelectedIndex - 1;
            if (-1 < indexMinus1 && rc.indentProp <= masterList[indexMinus1].indent)
            {
                rc.indentProp++;
            }
        }
        // then update list view
        masterList.UpdateListView(this);
    }

    private void AppBarUnindent_Click(object sender, RoutedEventArgs e)
    {
        // unindent the row control if currently selected index is a list view item
        if (-1 < mainListView.SelectedIndex && mainListView.SelectedIndex < mainListView.Items.Count)
        {
            // but don't allow unindenting off left side of page
            RowControl rc = (RowControl)mainListView.Items[mainListView.SelectedIndex];
            if (rc.indentProp > 0)
            {
                rc.indentProp--;
            }
        }
        // then update list view
        masterList.UpdateListView(this);
    }

    public void AppBarShowCompl_Click(object sender, RoutedEventArgs e)
    {
        dataHandler.SaveUserSettings();

        masterList.UpdateListView(this);
    }

    public void AppBarMarkAsCompleted_Click(object sender, RoutedEventArgs e)
    {
        // toggle hidden state of active entry
        if (-1 < mainListView.SelectedIndex && mainListView.SelectedIndex < masterList.Count)
        {
            masterList[mainListView.SelectedIndex].completed = (masterList[mainListView.SelectedIndex].completed) ? false : true;

            masterList.UpdateListView(this);
        }
    }

}
}

我尝试下载服务器符号,但没有成功…

我发现挂起发生在GetIfFileExitsAsync的下面一行

retval = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(key);
我对您的代码做了以下更改,现在应该可以工作了

在DataHandler的构造函数中,使用Task.Run初始化userDataList

public DataHandler(MainPage mp)
{
    mainPage = mp;

    settingsHelper = new SettingsHelper();
    fileHelper = new FileHelper();

    LoadUserSettings();
    Task.Run(() =>
    {
        userDataList = LoadUserData();
    });
    Task.WaitAll();
}

我仍然不确定.net本机编译为什么会出现此问题,但会尝试简化项目并在MS内部频道中报告。

我在发布模式下尝试了许多MS官方示例和我自己的项目,但没有遇到此问题。首先尝试手动卸载应用程序,然后再次部署发布模式生成。为了缩小问题的范围,请查看如果取消选中project属性页的“Build”选项卡上的“Compile with.Net Native tool chain”会发生什么。更多关于使用了什么(第三方/开源)的详细信息,以及您对启动屏幕、起始页或App.xaml.cs中的其他内容所做的任何特殊操作可能有助于其他人理解。尝试找出挂起(或未处理的异常)发生的位置。如果在app.xaml.cs中没有执行任何特殊操作,请尝试注释除此之外的所有代码;看看会发生什么。若要获取调试版本的更多调试信息,请在项目属性页的“调试”选项卡中将调试器类型更改为“混合”。您将能够在VisualStudio输出窗口中获取COM错误代码。您可以通过查看第一个屏幕截图中“e”的内容来检查堆栈跟踪。我的意思是在mainpage的构造函数中注释掉代码。全部或部分,以确定哪个部分将导致问题。我想问题应该与DataHandler和MasterList有关。如果是这样的话,你就无法找出问题所在。尝试简化实现并提供可用于其他人重现问题的代码。在进行更多故障排除后,问题似乎是使用.NET本机工具链编译的。这到底是什么意思?我不明白执行此操作(发布版本)和不执行此操作(调试版本)之间的区别?这里有一个指向github上的子列表的链接:好的,谢谢,这确实解决了挂起问题,但由于某些原因,在Task.Run()内调用LoadUserData()不允许对本地文件夹进行读取访问,因此,这样做不允许加载用户数据?您可以分享一个屏幕截图,说明您在特定代码行中看到的错误吗?在编译发布版本(使用.NET本机工具链)时,我似乎无法获得良好的调试信息。这里有一些我得到的,我不知道该怎么办。如果需要,您可以通过克隆存储库来重新创建。取消选中“项目属性”页面中的“优化代码”复选框将使您能够调试发布版本。请告诉我您为重新创建该问题所做的确切步骤。我没有遇到任何问题,只需在你的应用程序上按+和-按钮。
public DataHandler(MainPage mp)
{
    mainPage = mp;

    settingsHelper = new SettingsHelper();
    fileHelper = new FileHelper();

    LoadUserSettings();
    Task.Run(() =>
    {
        userDataList = LoadUserData();
    });
    Task.WaitAll();
}