【问题标题】:Widows 10 UWP - creating pack in debug/release mode - differencesWindows 10 UWP - 在调试/发布模式下创建包 - 差异
【发布时间】:2017-04-25 23:42:13
【问题描述】:

我创建了简单的 Windows 10 UWP 应用。当我在调试模式下创建包并安装它时,一切都很好。但是当我在 Release 模式下运行它时,它失败了。

我认为问题出在我的 sqlite 数据库上。因为当我在调试模式下运行它时,数据库文件被复制到本地文件夹并具有他的大小(17KB)。但是当我在发布模式下运行它时,文件的大小是 0 KB。

我已将我的数据库文件设置为:

"Build action: Content"  
"Copy to Output folder: Always"

可能是什么问题?

【问题讨论】:

  • 我无法重现您的问题。您的数据库文件的设置和您发布的代码是正确的。如果您仍然有问题,请分享minimal reproducible example,以便我们重现它。
  • 您好,感谢您的建议。我做到了(最小化我的项目)和奇迹。这个检查数据库的功能也在发布模式下工作。但仍然不知道为什么它在整个项目中不起作用。您是尝试构建我的项目还是只检查了代码?
  • 对不起,它似乎不起作用。我的错。我已经检查了本地文件夹中已经创建的文件。我认为它有效。所以我最小化了项目。问题在于 2 功能。在“根”页面上,如果不存在,我执行 checkDataBaseConnection() 来创建数据库文件。当我调试时,我不知道为什么在调用 GetFileFromApplicationUriAsync(uri) 后应用程序将我移动到 LoadChartContents() 函数,但是数据库尚未创建,因此出现错误。此行为不会出现在调试模式下。 [链接]drive.google.com/open?id=0B5ZmP3NVyVJkTnNVc19LYmthNTQ

标签: c# sqlite uwp windows-10-universal


【解决方案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));
    }
}

【讨论】:

    【解决方案2】:

    好吧,我不知道我可以在发布模式下轻松调试。所以我现在知道问题出在哪里了

    我在检查数据库的函数中有这段代码:

    var uri = new Uri("ms-appx:///sale.db");
    var file = await StorageFile.GetFileFromApplicationUriAsync(uri);

    GetFileFromApplicationUriAsync() 上的应用程序崩溃。在调试模式下它工作正常。

    【讨论】:

    • 我遇到了同样的问题,在商店模式下,应用程序在资产文件夹中找到文件,在发布模式下调试时我无法重现,你找到解决方案了吗?我也在使用 GetFileFromApplicationUriAsync
    【解决方案3】:

    您的问题似乎与您的数据库文件的属性有关。

    尝试接下来的步骤:

    1. 在 Visual Studio 上右键单击解决方案中的数据库文件 资源管理器并选择名为“属性”的最后一项
    2. 检查 2 个属性 "Build Action""Copy to Output Directory"。 根据您的要求 - 您可以配置这两个属性 随心所欲。
    3. 我认为配置: "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"));
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2014-02-18
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多