Xamarin.Forms の XAML ホット リロード

XAML ホット リロードは、既存のワークフローに接続して生産性を向上させ、時間を節約します。 XAML ホット リロードを使用しない場合は、XAML の変更を確認するたびにアプリをビルドしてデプロイする必要があります。 ホット リロードでは、XAML ファイルを保存すると、変更が実行中のアプリに反映されます。 さらに、ナビゲーションの状態とデータが維持されるため、アプリ内の場所を失うことなく UI をすばやく反復処理できます。 したがって、XAML ホット リロードを使用すると、UI の変更を検証するためにアプリの再構築とデプロイに費やす時間が短縮されます。

注意

を使用Xamarin.Formsせず、ネイティブの UWP または WPF アプリを作成する場合は、「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 ホット リロードを使用するために追加のインストールは必要ありませんが、最適なエクスペリエンスを確保するために構成を 2 チェックする必要がある場合があります。 まず、IDE 設定で有効にします。

  • Windows では、ツール> オプションのデバッグ>ホット リロードの [XAML ホット リロードを有効にする] チェック ボックス (および必要なプラットフォーム)>チェックします。
    • 以前のバージョンの Visual Studio 2019 では、チェック ボックスは [ツール>オプション>] Xamarin>ホット リロード にあります。
  • Mac では、Visual Studio>Preferences> Tools for Xamarin XAML ホット リロードの [Enable Xamarin ホット リロード]\(Xamarin> ホット リロードを有効にする\) チェックボックスをチェックします。
    • 以前のバージョンのVisual Studio for Macでは、このチェック ボックスは Visual Studio>Preferences>Projects>Xamarin ホット リロード にあります。

次に、Android と iOS のビルド設定で、リンカーが "リンクしない" または "リンクなし" に設定されていることをチェックします。 物理 iOS デバイスで XAML ホット リロードを使用するには、Mono インタープリターを有効にする (Visual Studio 16.4 以降) をチェックするか、追加の mtouch 引数 (Visual Studio 16.3 以下) に --インタープリターを追加する必要があります。

次のフローチャートを使用して、XAML ホット リロードで使用する既存のプロジェクトのセットアップをチェックできます。

XAML ホット リロード セットアップ

ホット リロード モード

XAML ホット リロードは、新しい変更のみモードと古いフル ページ モードの 2 つの異なるモードで動作できます。

Visual Studio 16.9 および Visual Studio for Mac 8.9 以降では、既定の動作は、5.0 以降を使用するすべてのアプリで変更専用モードが使用Xamarin.Formsされます。 以前のバージョンの Xamarin.Formsの場合は、フル ページ モードが使用されます。 ただし、ホット リロード IDE 設定 (Windows の場合は [ツール> オプション>デバッグ]>ホット リロード または Mac のXamarin>XAML ホット リロードVisual Studio>Preferences> Tools) では、すべてのアプリに対してフル ページ モードを強制的に使用できます。

変更のみモード では、編集時に変更された内容を正確に確認するために XAML が解析され、それらの変更のみが実行中のアプリに送信されます。 これは、WPF と UWP ホット リロードで使用されるのと同じテクノロジです。 UI の状態は保持されます。ページ全体の UI は再作成されないため、編集の影響を受けるコントロールの変更されたプロパティを更新するだけです。 変更のみモードでは、 ライブ ビジュアル ツリーの使用も有効になります。

既定では、変更のみモードでは、変更を確認するためにファイルを保存する必要はありません。入力すると、更新プログラムがすぐに適用されます。 ただし、この動作は、ファイルの保存時にのみ更新するように変更できます。 これは、ホット リロード IDE 設定の [ドキュメントの保存時に XAML ホット リロードを適用する] チェック ボックス (現在は Windows でのみ使用可能) をオンにすることで実現できます。 ドキュメントの保存時にのみ更新すると、より大きな XAML 更新を行い、完了するまで表示しない場合に便利な場合があります。

フル ページ モード では、編集と保存を行った後、実行中のアプリに完全な XAML ファイルが送信されます。 次に、実行中のアプリによってページが再読み込みされ、コントロールが再作成されます。UI の更新が表示されます。

変更のみモードはホット リロードの将来であり、可能な限り使用することをお勧めします。 高速で、UI の状態を保持し、 ライブ ビジュアル ツリーをサポートします。 フル ページ モードは、まだ 5.0 に更新されていないアプリに対して Xamarin.Forms 引き続き提供されます。

注意

モードを切り替えるときは、デバッグ セッションを再起動する必要があります。

XAML エラー

変更のみモード: XAML パーサーが無効と見なすホット リロードを変更すると、エディターに下線が付いたエラーが表示され、エラー ウィンドウに含められます。 これらのホット リロード エラーには、"XHR" で始まるエラー コードがあります (XAML ホット リロードの場合)。 ページにこのようなエラーがある場合、ホット リロードページの他の部分で行われた場合でも、変更は適用されません。 ページの作業を再開するためにホット リロードのすべてのエラーを修正します。

フル ページ モード: XAML ホット リロードが再読み込みできない変更を行うと、エディターにエラーの下線が表示され、エラー ウィンドウに含められます。 これらの変更は、失礼な編集と呼ばれ、XAML を誤読したり、存在しないイベント ハンドラーにコントロールを接続したりすることが含まれます。 失礼な編集を行っても、アプリを再起動せずに再読み込みを続行できます。XAML ファイル内の別の場所で別の変更を行い、保存をクリックします。 失礼な編集は再読み込みされませんが、他の変更は引き続き適用されます。

複数のプラットフォームで一度に再読み込みする

XAML ホット リロードでは、Visual Studio とVisual Studio for Macでの同時デバッグがサポートされています。 Android と iOS ターゲットを同時にデプロイして、両方のプラットフォームに反映された変更を一度に確認できます。 複数のプラットフォームでデバッグするには、次を参照してください。

既知の制限事項

  • Xamarin.Forms Android、iOS、UWP 以外のターゲット (macOS など) は現在サポートされていません。
  • XAML コンパイルを無効にする [XamlCompilation(XamlCompilationOptions.Skip)] の使用はサポートされていないため、ライブ ビジュアル ツリーで問題が発生する可能性があります。
  • XAML ホット リロード セッション中は、ファイルまたは NuGet パッケージを追加、削除、または名前変更することはできません。 ファイルまたは NuGet パッケージを追加または削除する場合は、アプリを再構築して再デプロイして、XAML ホット リロードを引き続き使用します。
  • 最適なエクスペリエンスを得るには、リンカーを [リンクしない ] または [リンクなし] に設定します。 Link SDK の設定はほとんどの場合のみ機能しますが、場合によっては失敗する場合があります。 リンカーの設定は、Android と iOS のビルド オプションで確認できます。
  • 物理 iPhone でのデバッグでは、インタープリターで XAML ホット リロードを使用する必要があります。 これを行うには、プロジェクト設定を開き、[iOS ビルド] タブを選択し、[ Mono インタープリター設定を有効にする] が有効になっていることを確認します。 プロパティ ページの上部にある [プラットフォーム ] オプションを iPhone に変更することが必要な場合があります。
  • XAML ホット リロードでは、イベント ハンドラー、カスタム コントロール、ページ 分離コード、その他のクラスなど、C# コードを再読み込みできません。

トラブルシューティング

  • XAML ホット リロード出力を表示してステータス メッセージを表示します。これは、トラブルシューティングに役立ちます。
    • Windows: [出力の表示>] を使用して [出力] を表示し、上部にある [出力の表示元][Xamarin ホット リロード] を選択します。
    • Mac: ステータス バーの XAML ホット リロードの上にマウス ポインターを合わせると、そのパッドが表示されます
  • XAML ホット リロードが初期化に失敗した場合:
    • バージョンを更新します Xamarin.Forms 。
    • 最新バージョンの IDE を使用していることを確認します。
    • プロジェクトのビルド設定で、Android または iOS リンカーの設定を [リンクしない ] に設定します。
  • XAML ファイルの保存時に何も起こっていない場合は、IDE で XAML ホット リロードが有効になっていることを確認します。
  • 物理 iPhone でデバッグしていて、アプリが応答しなくなった場合は、インタープリターが有効になっていることをチェックします。 有効にするには、iOS ビルド設定で [Mono インタープリターを有効にする (Visual Studio 16.4/8.4 以降)] をチェックするか、[追加の mtouch 引数] フィールド (Visual Studio 16.3/8.3 以前) に --interpreter を追加します。

バグを報告するには、[ヘルプ>] [フィードバック>の送信] [Windows で問題を報告する] 、および [Mac問題を報告する] > を使用します。