8.x から UWP への移植Windows ランタイムトラブルシューティング
前のトピックは プロジェクトのインポートでした。
この移植ガイドは最後まで読むことを強くお勧めしますが、早く先へ進んで、プロジェクトのビルドと実行の段階まで到達したいと思われるのも無理のないことです。 このために、重要でないコードに対してコメント アウトやスタブの挿入を行って一時的に先に進み、後でその部分に戻って対応することもできます。 このトピックには、トラブルシューティングの現象とその対処法を示す表が記載されており、以降のいくつかのトピックに示されている情報に代わるものではありませんが、この段階での作業に役立ちます。 以降のトピックを読み進む中で、いつでもこの表に戻って参考にすることができます。
問題の追跡
XAML 解析例外は、特に、例外内に意味のあるエラー メッセージがない場合に診断が困難な場合があります。 デバッガーが初回例外をキャッチするように構成されていることを確認してください (早い段階で解析例外のキャッチを試行するため)。 デバッガーで例外変数を調べて、HRESULT やメッセージ内に有用な情報があるかどうかを確認できます。 また、XAML パーサーを使って、Visual Studio の出力ウィンドウを調べて、エラー メッセージの出力を確認することもできます。
アプリが終了し、XAML マークアップの解析中にハンドルされない例外がスローされたことがわかっている場合は、不足しているリソースへの参照が原因である可能性があります (つまり、一部のシステム TextBlock スタイル キーなど、Windows 10 アプリ用ではなくユニバーサル 8.1 アプリにキーが存在するリソース)。 または、 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>
症状と解決方法のトラブルシューティング
表の救済情報は、自分自身のブロックを解除するのに十分な情報を提供することを目的としています。 これらの各問題の詳細については、後のトピックを参照してください。
症状 | 修正 |
---|---|
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 ファイル内の同じ要素に同じ名前を追加するか、名前を完全に省略してみてください。 |
デバイスでの実行時にアプリが終了するか、Visual Studio からの起動時に次のエラーが表示される: "Windows ランタイム 8.x アプリ […] をアクティブ化できません。 アクティブ化要求が失敗し、"Windows はターゲット アプリケーションと通信できませんでした。 これは通常、ターゲット アプリケーションのプロセスが中止されたことを示します。 […]”. | 問題は、初期化中に、独自の Pages またはバインドされたプロパティ (またはその他の型) で実行されている命令型コードである可能性があります。 または、アプリが終了したときに表示されようとしている XAML ファイルの解析中に発生する可能性があります (Visual Studio から起動すると、スタートアップ ページになります)。 無効なリソース キーを探すか、このトピックの「問題の追跡」セクションのガイダンスを試してください。 |
XAML パーサーまたはコンパイラ、またはランタイム例外では、"リソース "<resourcekey>" を解決できませんでした." というエラーが表示されます。 | リソース キーは、ユニバーサル Windows プラットフォーム (UWP) アプリには適用されません (一部の Windows Phone リソースの場合など)。 適切な同等のリソースを見つけて、マークアップを更新します。 すぐに発生する可能性がある例は、 PhoneAccentBrush などのシステム キーです。 |
C# コンパイラは、エラー "型または名前空間名 '<name>' が見つかりませんでした [...]" または "型または名前空間名 '< 名前空間 [...]> " または "型または名前空間名 '<name>' が現在のコンテキストに存在しません。 | これは、型が拡張 SDK に実装されていることを意味する可能性があります (ただし、救済策がそれほど簡単ではない場合もあります)。 Windows API の参照コンテンツを使って、API を実装している拡張 SDK を特定し、Visual Studio の [追加]>[参照] コマンドを使って、その SDK への参照をプロジェクトに追加します。 アプリがユニバーサル デバイス ファミリと呼ばれる API のセットを対象とする場合は、 ApiInformation クラスを使用して、呼び出す前に拡張 SDK が存在するかどうかを実行時にテストすることが重要です (これはアダプティブ コードと呼ばれます)。 ユニバーサル API が存在する場合は、拡張機能 SDK の API より常に推奨されます。 詳細については、「 Extension SDK」を参照してください。 |
次のトピックでは、 XAML と UI のインポート。