2015-10-08 30 views
1

調試版本(86,64,ARM)都可以正常工作,發佈版本可以正常工作,但是當它們運行時,我的應用程序窗口打開並保持空白(白色背景)。我在輸出中看到的唯一錯誤是一大堆:UWP應用程序發佈版本在啓動畫面上掛起?

...PDB file was not present when IL code was compiled to native. 

我不知道,如果缺少.pdb文件的罪魁禍首 - 很肯定他們沒有,因爲他們是隻是爲了調試目的是對的? 無論如何,這是我嘗試爲Windows Store準備的第一個UWP應用程序,並不完全確定是否必須執行任何特殊的操作,例如在我自己的計算機上測試發行版本?

編輯1:謝謝@Alan的建議,手動卸載應用程序有時會讓我通過空白窗口加載應用程序欄,但是當它沒有掛在啓動畫面上時,我得到這些錯誤:

Debugger Error 1Debugger Error 2

我並沒有做什麼特別的閃屏,裝我所有的視覺資產使用清單中的內置工具,並沒有修改其缺省值App.xaml.cs。這是我的Mainpage.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); 
     } 
    } 

} 
} 

我已經將FileService和SettingsService類從開放的Template10添加到項目中。

構建設置「使用.NET Native工具鏈編譯」未選中,我嘗試使用它進行部署,並且已針對調試/發佈版本選中/未選中,現在調試版本也經常掛在啓動屏幕上?有了它檢查,我收到了一大堆的這些錯誤,以及:

'Sublist.exe' (Win32): Loaded 'C:\Windows\System32\biwinrt.dll'. Skipped loading symbols. Module is native, and native debugging is currently disabled. 

我試過沒有成功下載服務器符號...

+0

我已經嘗試了許多MS官方樣本和我自己的項目在發佈模式,但沒有遇到此問題。先嚐試手動卸載應用程序,然後再次部署發佈模式版本。爲了縮小問題的範圍,請查看在項目屬性頁的「生成」選項卡中取消選中「編譯時使用.Net本機工具鏈」會發生的情況。關於什麼(第三方/開源)已經被使用的更多細節,以及你使用啓動畫面,啓動頁面或App.xaml.cs中的一些內容所做的任何特別的細節可能有助於他人理解。 –

+0

嘗試找出掛起(或未處理的異常)發生的位置。如果你沒有在app.xaml.cs中做任何特殊的事情,可以嘗試註釋掉this.InitializeComponent();並看看會發生什麼。要獲取調試版本的更多調試信息,請將調試器類型更改爲項目屬性頁的「調試」選項卡中的「混合」。您將能夠在Visual Studio輸出窗口中獲取COM錯誤代碼。您可以通過在第一個屏幕截圖中查看「e」的內容來檢查堆棧跟蹤。 –

+0

我的意思是在主頁的構造函數中註釋掉代碼。他們全部或部分地區確定哪個部分會導致問題。我想這個問題應該與DataHandler和MasterList有關。如果是這種情況,你無法弄清楚問題所在。嘗試簡化實現並提供可用於其他人重現問題的代碼。 –

回答

3

我發現掛發生在下面的行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內部渠道舉報。

+0

好的謝謝,這確實解決了掛起,但調用Task.Run()內的LoadUserData()不允許讀取訪問本地文件夾由於某種原因,所以這樣做不允許加載用戶數據? – landonmutch

+0

你能分享一個關於你在特定代碼行上看到的錯誤的截圖嗎? –

+0

編譯發行版本時(使用.NET Native工具鏈),我似乎無法獲得良好的調試信息。這裏有一些[錯誤](http://imgur.com/XvCIZl4)我得到,我不知道該怎麼辦。如果需要,可以通過克隆存儲庫來重新創建它。 – landonmutch

相關問題