Widows 10 UWP - 在调试/发布模式下创建包 - 差异

时间:2016-12-10 17:32:09

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

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

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

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

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

可能有什么问题?

3 个答案:

答案 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)

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

尝试下一步:

  1. 在Visual Studio上右键单击解决方案中的数据库文件 资源管理器并选择名为“属性”的最后一项
  2. 检查2个媒体资源"Build Action""Copy to Output Directory"。 根据您的要求 - 您可以配置这两个属性 如你所愿。
  3. 我认为配置: "Build Action" = "Content""Copy to Output Directory" = "Copy always" 应该解决你的情况。
  4. Example

    有关详细信息,请查看file properties on MSDN

    希望它会对你有所帮助。

    UPD:

    我注意到你已经应用了这些动作。我认为你也有访问文件的问题。

    尝试使用下一代码访问您的文件:

    var file = await StorageFile.GetFileFromPathAsync(Path.Combine(Package.Current.InstalledLocation.Path, "sale.db"));