C# UWP应用程序发布版本挂起在启动屏幕上?
调试版本(86、64、ARM)都可以正常工作,发布版本可以正常构建,但当它们运行时,我的应用程序窗口将打开并保持空白(白色背景)。我在输出中看到的唯一错误是: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应用程序,但不完全确定我是否需要做任何特殊的事情,比如在我
...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();
}