Windows Phone Silverlight から UWP への移植のトラブルシューティング
前のトピックは プロジェクトのインポートでした。
この移植ガイドは最後まで読むことを強くお勧めしますが、早く先へ進んで、プロジェクトのビルドと実行の段階まで到達したいと思われるのも無理のないことです。 このために、重要でないコードに対してコメント アウトやスタブの挿入を行って一時的に先に進み、後でその部分に戻って対応することもできます。 このトピックには、トラブルシューティングの現象とその対処法を示す表が記載されており、以降のいくつかのトピックに示されている情報に代わるものではありませんが、この段階での作業に役立ちます。 以降のトピックを読み進む中で、いつでもこの表に戻って参考にすることができます。
問題の追跡
XAML 解析例外は、特に、例外内に意味のあるエラー メッセージがない場合に診断が困難な場合があります。 デバッガーが初回例外をキャッチするように構成されていることを確認してください (早い段階で解析例外のキャッチを試行するため)。 デバッガーで例外変数を調べて、HRESULT やメッセージ内に有用な情報があるかどうかを確認できます。 また、XAML パーサーを使って、Visual Studio の出力ウィンドウを調べて、エラー メッセージの出力を確認することもできます。
アプリが終了し、XAML マークアップの解析中にハンドルされない例外がスローされたことがわかっている場合は、不足しているリソースへの参照の結果である可能性があります (つまり、一部のシステム TextBlock スタイル キーなど、Windows 10 アプリにはキーが存在しないリソース)。 または、 UserControl、カスタム コントロール、またはカスタム レイアウト パネル内でスローされる例外である可能性があります。
最終手段として、バイナリ分割を使うことができます。 ページからマークアップの約半分を削除し、アプリを再実行します。 その後、エラーが削除した半分の内側にあるか (どのような場合でも復元する必要があります)、または削除 しなかった半分のエラー 確認できます。 問題が特定されるまで、エラーを含む半分をさらに分割するプロセスを繰り返します。
TargetPlatformVersion
このセクションでは、Visual Studio で Windows 10 プロジェクトを開くと、"Visual Studio の更新が必要です。 1 つ以上のプロジェクトには、インストールされていないか、Visual Studio の将来の更新プログラムの一部として含まれているプラットフォーム SDK <version> が必要です。
- まず、インストールした Windows 10 用 SDK のバージョン番号を確認します。 C:\Program Files (x86)\Windows Kits\10\Include\<versionfoldername> に移動し、<versionfoldername> をメモしてください。これは、4 つの部分 "Major.Minor.Build.Revision" から成るバージョン文字列です。
- プロジェクト ファイルを開いて編集し、
TargetPlatformVersion
要素とTargetPlatformMinVersion
要素を見つけます。 次のように編集します。 <versionfoldername> ディスク上で見つかったクワッド表記のバージョン番号に置き換えます。
<TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
<TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>
症状と解決方法のトラブルシューティング
表の救済情報は、自分自身のブロックを解除するのに十分な情報を提供することを目的としています。 これらの各問題の詳細については、後のトピックを参照してください。
症状 | 修正 |
---|---|
XAML パーサーまたはコンパイラは、"名前 "<typename>" が名前空間 [...]. に存在しません" というエラーを示します。 | <typename>がカスタム型の場合は、XAML マークアップの名前空間プレフィックス宣言で "clr-namespace" を "using" に変更し、アセンブリ トークンを削除します。 プラットフォーム型の場合、これは型がユニバーサル Windows プラットフォーム (UWP) に適用されないので、同等の型を見つけてマークアップを更新することを意味します。 すぐに発生する可能性がある例は、 phone:PhoneApplicationPage と shell:SystemTray.IsVisible です。 |
XAML パーサーまたはコンパイラで、エラー "メンバー "<メンバー名>" が認識されないか、アクセスできません" または "プロパティ "<プロパティ名>" が型 [...] で見つかりませんでした" が発生します。 | これらのエラーは、ルート Page など、いくつかの型名を移植した後に表示され始めます。 メンバーまたはプロパティは UWP には適用されないため、同等のメンバーを見つけてマークアップを更新します。 すぐに発生する可能性がある例は、 SupportedOrientations と Orientation です。 |
XAML パーサーまたはコンパイラは、"アタッチ可能なプロパティ [...] というエラーを返します。が見つかりませんでした [...]."または "Unknown attachable member [...]." です。 | これは、添付プロパティではなく型によって発生する可能性があります。その場合、型に関するエラーが既に発生し、修正するとこのエラーは解消されます。 すぐに発生する可能性がある例は、 phone:PhoneApplicationPage.Resources と phone:PhoneApplicationPage.DataContext です。 |
XAML パーサーまたはコンパイラ、またはランタイム例外では、"リソース "<resourcekey>" を解決できませんでした." というエラーが表示されます。 | リソース キーは、ユニバーサル Windows プラットフォーム (UWP) アプリには適用されません。 適切な同等のリソースを見つけて、マークアップを更新します。 すぐに発生する可能性がある例は、システム TextBlock PhoneTextNormalStyle などのスタイル キーです。 |
C# コンパイラは、エラー "型または名前空間名 '<name>' が見つかりませんでした [...]" または "型または名前空間名 '< 名前空間 [...]> " または "型または名前空間名 '<name>' が現在のコンテキストに存在しません。 | これは、コンパイラが型の正しい UWP 名前空間をまだ認識していないことを意味する可能性があります。 これを修正するには、Visual Studio の Resolve コマンドを使用します。 API がユニバーサル デバイス ファミリと呼ばれる API のセットにない場合 (つまり、API は拡張 SDK に実装されます)、 Extension SDKを使用します。 ポートが単純でない場合もあります。 すぐに発生する可能性がある例は、 DesignerProperties と BitmapImage です。 |
デバイスでの実行時にアプリが終了するか、Visual Studio からの起動時に次のエラーが表示される: "Windows ランタイム 8.x アプリ […] をアクティブ化できません。 アクティブ化要求が失敗し、"Windows はターゲット アプリケーションと通信できませんでした。 これは通常、ターゲット アプリケーションのプロセスが中止されたことを示します。 […]”. | 問題は、初期化中に、独自の Pages またはバインドされたプロパティ (またはその他の型) で実行されている命令型コードである可能性があります。 または、アプリが終了したときに表示されようとしている XAML ファイルの解析中に発生する可能性があります (Visual Studio から起動すると、スタートアップ ページになります)。 無効なリソース キーを探すか、このトピックの「 問題の追跡 」セクションのガイダンスを試してください。 |
XamlCompiler エラー WMC0055: テキスト値 "<ストリーム ジオメトリ>" を "RectangleGeometry" 型の "Clip" プロパティに割り当てることができません | UWP では、 Microsoft DirectX XAML C++ UWP アプリの種類。 |
XamlCompiler エラー WMC0001: XML 名前空間 [...] の型 'RadialGradientBrush' が不明です | UWP には、 RadialGradientBrush 型がありません。 マークアップから RadialGradientBrush を削除し、他の種類の Microsoft DirectX XAML C++ UWP アプリを使用します。 |
XamlCompiler エラー WMC0011: 要素 "<UIElement 型>" のメンバー 'OpacityMask' が不明です | UWP Microsoft DirectX と XAML C++ UWP アプリ。 |
SYSTEM で 'System.Runtime.InteropServices.COMException' 型の最初の例外が発生しました。NI.DLL。 追加情報: アプリケーションは、別のスレッドにマーシャリングされたインターフェイスを呼び出しました。 (HRESULT からの例外: 0x8001010E (RPC_E_WRONG_THREAD))。 | 実行している作業は、UI スレッドで行う必要があります。 CoreWindow.GetForCurrentThread) を呼び出します。 |
アニメーションは実行中ですが、ターゲット プロパティには影響しません。 | アニメーションを独立させるか、アニメーションに EnableDependentAnimation="True" を設定します。 「アニメーション」をご覧ください。 |
Visual Studio で Windows 10 プロジェクトを開くと、"Visual Studio の更新が必要です。 1 つ以上のプロジェクトには、インストールされていないか、Visual Studio の将来の更新プログラムの一部として含まれているプラットフォーム SDK <version> が必要です。 | このトピックの「 TargetPlatformVersion 」セクションを参照してください。 |
Xaml.cs ファイルで InitializeComponent が呼び出されると、System.InvalidCastException がスローされます。 | これは、同じxaml.cs ファイルを共有する複数の xaml ファイル (少なくとも 1 つは MRT 修飾) があり、要素に 2 つの xaml ファイル間で矛盾する x:Name 属性がある場合に発生する可能性があります。 両方の xaml ファイル内の同じ要素に同じ名前を追加するか、名前を完全に省略してみてください。 |
次のトピックでは、 XAML と UI のインポート。