針對將 Windows 執行階段 8.x 移植到 UWP 進行疑難排解
上一個主題是移植專案。
強烈建議您完整閱讀本移植指南,但我們也理解您渴望進行下一步,進入專案建立和執行的階段。 為此,您可以透過註釋或刪除任何非必要的程式碼來暫時取得進展,之後再回來繼續閱讀。 本主題中的疑難排解症狀和補救措施表在此階段可能對您有所幫助,但只靠它並不能取代接下來的幾個主題。 當您學習到後面的主題時,隨時都可以返回參考該資料表。
追蹤問題
XAML 剖析例外狀況可能難以診斷,特別是如果例外狀況中的錯誤訊息沒有意義。 請確定偵錯工具已設定為捕獲首次發生的例外狀況 (以便儘早嘗試並捕獲剖析例外狀況)。 您可以檢查偵錯工具中的例外狀況變數,以判斷 HRESULT 或訊息是否有任何有用的資訊。 此外,請檢查 Visual Studio 的輸出視窗,以取得 XAML 剖析器所輸出的錯誤訊息。
如果您的應用程式終止,並且您只知道在 XAML 標記剖析期間引發了未處理的例外狀況,那麼這問題可能是因為參考了缺少的資源所造成 (也就是其索引鍵適用於 Universal 8.1 應用程式但不適用於 Windows 10 應用程式的資源,例如某些系統 TextBlock 樣式索引鍵)。 或者,可能是在 UserControl、自訂控制項或自訂版面配置面板內擲回例外狀況。
最後手段則是二進位分割。 從「頁面」移除一半的標記,然後重新執行應用程式。 這樣您就會知道錯誤是出在您所移除的那半部內 (無論如何,您現在都應該還原這個部分),還是出在您未移除的那半部內。 透過分割包含錯誤的一半來重複此過程,依此繼續執行,直到您找到問題原因為止。
TargetPlatformVersion
本節說明如果在 Visual Studio 中開啟 Windows 10 專案時,看到訊息「Visual Studio 需要更新。 一個或多個專案需要平台 SDK <版本>,其未安裝或作為 Visual Studio 未來更新的一部分」時該怎麼做?
- 首先,確定您所安裝的 Windows 10 SDK 版本號碼。 瀏覽至 C:\Program Files (x86)\Windows Kits\10\Include\<versionfoldername>,並記下 <versionfoldername>,該名稱將採用四元表示法「Major.Minor.Build.Revision」。
- 開啟專案檔案進行編輯,並找到
TargetPlatformVersion
和TargetPlatformMinVersion
元素。 依照以下方法進行編輯,將 <versionfoldername> 取代為您在磁碟上找到的四元表示法版本號碼:
<TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
<TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>
疑難排解症狀和補救措施
資料表中的補救措施資訊旨在為您提供足夠的資訊以了解情況。 當您閱讀後面的主題時,您將找到更多有關各問題的詳細資訊。
徵兆 | 補救方法 |
---|---|
在 Visual Studio 中開啟 Windows 10 專案時,您會看到訊息「Visual Studio 需要更新。 一個或多個專案需要平台 SDK <版本>,其未安裝或作為 Visual Studio 未來更新的一部分」時該怎麼做? | 請參閱本主題中的 TargetPlatformVersion 一節。 |
在 xaml.cs 檔案中呼叫 InitializeComponent 時,會引發 System.InvalidCastException。 | 當您有多個 xaml 檔案 (至少其中一個符合 MRT 資格) 共用同一個 xaml.cs 檔案,且兩個 xaml 檔案之間的元素具有不一致的 x:Name 屬性時,就會發生這種情況。 嘗試對兩個 xaml 檔案中的相同元素新增相同的名稱,或完全省略那些名稱。 |
在裝置上執行時,應用程式終止,或從 Visual Studio 啟動時,您看到錯誤「無法啟動 Windows 執行階段 8.x 應用程式 [...]。 啟動要求失敗,並出現錯誤「Windows 無法與目標應用程式通訊」。 這通常表示目標應用程式的處理程序已中止。 | 問題可能出在初始化期間,您在自己的頁面或繫結屬性 (或其他類型) 中執行的命令式程式碼。 或者,問題可能在剖析應用程式終止時要顯示的 XAML 檔案時發生的 (如果從 Visual Studio 啟動,則為啟動頁面)。 請尋找無效的資源索引鍵,和/或嘗試本主題「追蹤問題」一節中的指南。 |
XAML 剖析器或編譯器,或執行階段例外狀況會提供錯誤「無法解析資源『<resourcekey>』。」。 | 資源索引鍵不適用於通用 Windows 平台 (UWP) 應用程式 (例如,某些 Windows Phone 資源)。 找到正確的對等資源並更新您的標記。 您馬上會遇到的例子可能是系統索引鍵,例如 PhoneAccentBrush 。 |
C# 編譯器提出錯誤「找不到類型或命名空間名稱『<name>』[...]」或「命名空間中不存在類型或命名空間名稱『<name>』[...]」或「類型或命名空間名稱『<名稱>』在目前內容中不存在」。 | 這可能代表該類型是在擴充 SDK 中實作的 (儘管在某些情況下,補救措施可能沒那麼簡單)。 使用 Windows API 參考內容來決定哪個擴充 SDK 會實作該 API,然後使用 Visual Studio 的 Add>Reference 指令將該 SDK 的參考新增到您的專案中。 如果您的應用程式面向稱為通用裝置系列的 API 集,則請務必先使用 ApiInformation 類別在執行階段測試擴充 SDK 是否存在,再呼叫它們 (這稱為調適型程式碼)。 如果存在通用 API,則選擇它會比選擇擴充 SDK 中的 API 更好。 如需詳細資訊,請參閱擴充 SDK。 |
下一個主題是移植 XAML 和 UI。