我创建了简单的Windows 10 UWP应用。当我在调试模式下创建包并安装它时,一切都没问题。但是当我在发布模式下运行时,它失败了。
我认为问题出在我的sqlite数据库中。因为当我在调试模式下运行它时,数据库文件被复制到本地文件夹并具有其大小(17KB)。但是当我在发布模式下运行它时,文件大小为0 KB。
我已将数据库文件设置为:
"Build action: Content"
"Copy to Output folder: Always"
可能有什么问题?
答案 0 :(得分:1)
我已经测试了您最新的最小化项目。这里的问题是checkDataBaseConnection
方法是一种异步方法,在你的代码中你没有等待它完成。因此,当执行LoadChartContents
方法时,数据库文件可能尚未复制到LocalFolder。因此,LoadChartContents
方法中会出现错误。
要解决此问题,我建议您等待checkDataBaseConnection
方法并仅在数据库存在时导航到“主”页面。
例如,我们可以更改checkDataBaseConnection
方法,如下所示:
public static async Task<bool> checkDataBaseConnection()
{
if (null == await ApplicationData.Current.LocalFolder.TryGetItemAsync("sale.db"))
{
StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("sale.db");
await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder, "sale.db", NameCollisionOption.ReplaceExisting);
}
return true;
}
在“根”页面中,利用OnNavigatedTo方法,例如:
public root()
{
this.InitializeComponent();
PassedData.passSplit = MySplitView;
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
}
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
var result = await myDatabase.checkDataBaseConnection();
if (result)
{
MyFrame.Navigate(typeof(main1));
}
}
答案 1 :(得分:0)
好的,我不知道我可以在发布模式下轻松调试。所以我现在知道问题在哪里
我在函数中有这段代码检查数据库:
var uri = new Uri(“ms-appx:///sale.db”);
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);
GetFileFromApplicationUriAsync()上的应用程序崩溃。在调试模式下它可以正常工作。
答案 2 :(得分:0)
您的问题似乎与数据库文件的属性相关联。
尝试下一步:
"Build Action"
和"Copy to Output Directory"
。
根据您的要求 - 您可以配置这两个属性
如你所愿。"Build Action" = "Content"
和
"Copy to Output Directory" = "Copy always"
应该解决你的情况。有关详细信息,请查看file properties on MSDN
希望它会对你有所帮助。
我注意到你已经应用了这些动作。我认为你也有访问文件的问题。
尝试使用下一代码访问您的文件:
var file = await StorageFile.GetFileFromPathAsync(Path.Combine(Package.Current.InstalledLocation.Path, "sale.db"));