的 XAML 熱重新載入Xamarin.Forms

XAML 熱重新載入 插入現有的工作流程,以提高生產力並節省您的時間。 如果沒有 XAML 熱重新載入,您每次想要看到 XAML 變更時都必須建置和部署您的應用程式。 使用 熱重新載入 時,當您儲存 XAML 檔案時,變更會即時反映在執行中的應用程式中。 此外,您的瀏覽狀態和數據將會維持,讓您快速查看 UI,而不會遺失應用程式中的位置。 因此,使用 XAML 熱重新載入,您將花費較少的時間重建和部署應用程式來驗證 UI 變更。

注意

如果您要撰寫原生 UWP 或 WPF 應用程式,而不是使用 Xamarin.Forms,請參閱適用於 UWP 和 WPF 的 XAML 熱重新載入。

系統需求

IDE/Framework 所需的最低版本
Visual Studio 2019 16.9 僅適用於變更模式,16.4 表示完整頁面模式
Visual Studio 2019 for Mac 8.9 僅適用於變更模式,8.4 表示完整頁面模式
Xamarin.Forms 5.0.0.2012 僅適用於變更模式;4.1 用於完整頁面模式

啟用 XAML 熱重新載入Xamarin.Forms

如果您是從範本開始,則 XAML 熱重新載入 預設為開啟,且項目設定為不使用其他設定。 在模擬器或實體裝置上對 Android、iOS 或 UWP 應用程式進行偵錯,並變更 XAML 以觸發 XAML 熱重新載入。

如果您是從現有的Xamarin.Forms解決方案工作,則不需要額外的安裝才能使用 XAML 熱重新載入,但您可能必須仔細檢查您的設定,以確保獲得最佳體驗。 首先,在您的 IDE 設定中加以啟用:

  • 在 Windows 上,核取 [工具>選項>>偵錯] 中的 [啟用 XAML 熱重新載入] 複選框(以及所需的平臺 熱重新載入。
    • 在舊版 Visual Studio 2019 中,複選框位於 [工具>選項>Xamarin> 熱重新載入]。
  • 在 Mac 上,核取 Visual Studio>Preferences>Tools for Xamarin XAML 熱重新載入 的 [啟用 Xamarin>熱重新載入] 複選框。
    • 在舊版 Visual Studio for Mac 中,複選框位於 Visual Studio>喜好>設定專案>Xamarin 熱重新載入。

然後,在您的 Android 和 iOS 組建設定中,檢查連結器是否已設定為 [不要連結] 或 [無連結]。 若要搭配實體 iOS 裝置使用 XAML 熱重新載入,您也必須檢查 [啟用 Mono 解釋器](Visual Studio 16.4 和更新版本)或將 --解釋器新增至您的其他 mtouch args (Visual Studio 16.3 和以下版本)。

您可以使用下列流程圖來檢查現有項目的設定,以搭配 XAML 熱重新載入 使用:

XAML Hot Reload Setup

熱重新載入模式

XAML 熱重新載入 可以在兩種不同的模式中運作 - 較新的模式只會變更模式和較舊的完整頁面模式

從 Visual Studio 16.9 和 Visual Studio for Mac 8.9,預設行為是變更僅針對所有使用 Xamarin.Forms 5.0 或更新版本的應用程式使用模式。 對於舊版 的 Xamarin.Forms,會使用完整頁面模式。 不過,您可以在 熱重新載入 IDE 設定中,強制針對所有應用程式使用完整頁面模式(工具>選項>>偵錯 熱重新載入 Windows 或 Mac 上適用於 Xamarin>XAML 熱重新載入 的 Visual Studio>喜好>設定工具)。

變更只會 剖析 XAML,以查看當您進行編輯時所變更的內容,並將這些變更只傳送至執行中的應用程式。 這是 WPF 和 UWP 熱重新載入 所使用的相同技術。 它會保留UI狀態,因為它不會重新建立完整頁面的UI,只是更新受編輯影響之控件的變更屬性。 僅變更模式也可讓您使用 即時可視化樹狀結構

根據預設,只有變更模式,您不需要儲存盤案以查看變更 - 當您輸入時,會立即套用更新。 不過,您可以變更此行為,只在儲存盤案時更新。 這可以藉由在 熱重新載入 IDE 設定中核取 [套用 XAML 熱重新載入 在檔案儲存時套用] 複選框來完成。 如果您進行較大的 XAML 更新,而且在檔案儲存完成之前不希望它們顯示,則只有在檔案儲存時更新才會有用。

完整頁面模式 會在進行編輯並儲存之後,將完整的 XAML 檔案傳送至執行中的應用程式。 執行中的應用程式接著會重載頁面,重新建立其控制件 - 您會看到 UI 重新整理。

只有變更模式是 熱重新載入 的未來,建議您盡可能使用它。 其速度很快,會保留UI狀態,並支援 即時可視化樹狀結構。 尚未更新為 Xamarin.Forms 5.0 的應用程式仍提供完整頁面模式。

注意

切換模式時,您必須重新啟動偵錯會話。

XAML 錯誤

僅變更模式:如果您變更 熱重新載入 XAML 剖析器視為無效,則會在編輯器中顯示錯誤底線,並將其包含在錯誤視窗中。 這些 熱重新載入 錯誤有一個錯誤碼,開頭為 「XHR」 (適用於 XAML 熱重新載入)。 如果頁面上有任何這類錯誤,即使頁面上的其他部分發生,熱重新載入 也不會套用變更。 修正 熱重新載入 的所有錯誤,以重新開始處理頁面。

完整頁面模式:如果您變更 XAML 熱重新載入 無法重載,則會在編輯器中顯示錯誤底線,並將其包含在錯誤視窗中。 這些變更稱為粗魯的編輯,包括模糊您的 XAML,或將控件連接到不存在的事件處理程式。 即使有粗魯的編輯,您也可以繼續重載而不重新啟動應用程式 - 在 XAML 檔案的其他地方進行另一個變更,然後按 [儲存]。 粗魯的編輯將不會重載,但您的其他變更將會繼續套用。

一次重載多個平臺上

XAML 熱重新載入 支援 Visual Studio 和 Visual Studio for Mac 中的同時偵錯。 您可以同時部署 Android 和 iOS 目標,一次查看兩個平臺上反映的變更。 若要在多個平台上偵錯,請參閱:

已知的限制

  • Xamarin.Forms 目前不支援 Android、iOS 和 UWP 以外的目標(例如 macOS)。
  • 不支援 [XamlCompilation(XamlCompilationOptions.Skip)]、停用 XAML 編譯,而且可能會導致即時可視化樹狀結構發生問題。
  • 您無法在 XAML 熱重新載入 工作階段期間新增、移除或重新命名檔案或 NuGet 套件。 如果您新增或移除檔案或 NuGet 套件,請重建並重新部署您的應用程式,以繼續使用 XAML 熱重新載入。
  • 將您的連結器設定為 [不要連結 ] 或 [無連結] 以獲得最佳體驗。 連結 SDK 只會在大部分時間運作,但在某些情況下可能會失敗。 您可以在 Android 和 iOS 組建選項中找到連結器設定。
  • 在實體 i 上偵錯 電話 需要解釋器才能使用 XAML 熱重新載入。 若要這樣做,請開啟專案設定,選取 [iOS 建置] 索引標籤,並確定 [啟用Mono 解釋器 ] 設定已啟用。 您可能需要將屬性頁頂端的 [平臺] 選項變更i 電話
  • XAML 熱重新載入 無法重載 C# 程式代碼,包括事件處理程式、自定義控件、頁面代碼後置和其他類別。

疑難排解

  • 顯示 XAML 熱重新載入 輸出以查看狀態訊息,有助於進行疑難解答:
    • Windows:顯示 [檢視>輸出] 的 [輸出],然後在頂端的 [顯示輸出來源] 底下選取 [Xamarin 熱重新載入
    • Mac:將滑鼠停留在狀態列中的 XAML 熱重新載入 上以顯示該面板
  • 如果 XAML 熱重新載入 無法初始化:
    • 更新您的 Xamarin.Forms 版本。
    • 請確定您使用的是最新版本的 IDE。
    • 將 Android 或 iOS 連結器設定設為 [不要在專案的組建設定中連結 ]。
  • 如果儲存 XAML 檔案時不會發生任何動作,請確定 IDE 中已啟用 XAML 熱重新載入。
  • 如果您要對實體 i 進行偵錯 電話,且您的應用程式沒有回應,請檢查解釋器是否已啟用。 若要開啟它,請在 iOS 組建設定中核取 [啟用 Mono 解釋器] [啟用 Mono 解釋器](Visual Studio 16.4/8.4 和更新版本),或將 --解釋器新增[其他 mtouch 自變數] 字段 (Visual Studio 16.3/8.3 和更新版本)。

若要回報 Bug,請使用 [說明>傳送意見>反應] 報告 Windows 上的問題,以及在 Mac 上回報問題的說明。>