![](https://habrastorage.org/getpro/habr/post_images/179/990/d16/179990d16ee626c318c5ced2068de9d5.png)
これは、Windows Phone 8.0アプリからバージョン8.1への一連の更新の3番目の記事です。 今回は、最も難しいシナリオ-Windows Phone 8.0(Silverlight)アプリケーションをWindows Phone 8.1(XAML)に更新することについて説明します。 このプロセスは、アセンブリとそれらへのリンクを変更するための特別なアクションがVisual Studio(Reterget)にあるSilverlightまたはWindowsストアの場合ほど透明で理解しやすいものではありません。 この場合、新しいバージョン用にアプリケーションを手動で再構築する必要があります。 これが私たちがやることです。
作業の結果に応じて、アプリケーションを新しいプラットフォーム8.1にアップグレードし、 WinRTの使用に切り替えてその機能を使用できるようにするだけでなく、共通コードを使用して電話およびWindows用のユニバーサルアプリケーションのドラフトを取得します。
作業計画は次のとおりです。
- 新しいWindows Phone 8.1プロジェクトの作成
- コードの移植
- インターフェイスの移行
- Windowsストアプロジェクトの作成
Windows Phone 8.0用に開発された簡単なアプリケーションがあります。これをWindows Phone 8.1にアップグレードします。
このアプリケーションは、Windows Phoneアプリケーションプロジェクトと、あらゆる種類の必要なクラスを含むポータブルクラスライブラリの2つのプロジェクトで構成されています。 サードパーティライブラリのうち、このアプリケーションはMVVMLightのみを使用します。
![](https://habrastorage.org/getpro/habr/post_images/b54/5b6/caa/b545b6caa4a84ac687b15b13c1e8a190.png)
新しいWindows Phone 8.1プロジェクトの作成
アプリケーションがWindows Phone 8.1だけでなく、以前のバージョンのWindows Phoneでも機能するには、新しいプロジェクトとともにWindows Phone 8.0プロジェクトを引き続きサポートする必要があります。
最善の解決策は、同じソリューションの隣にWindows Phone 8.1プロジェクトを作成し、両方のプロジェクトのコードを可能な限り再利用することです。
2番目のオプションは、Windows Phone 8.1に再ターゲットアクションを使用して、既存のプロジェクトのライブラリリンクを自動的に修正することです。 ただし、XAMLではなく、Silverlight 8.1アプリケーションを取得すると、下位互換性が失われます。
![](https://habrastorage.org/getpro/habr/post_images/8fe/1ef/82a/8fe1ef82a18ada7576feaea46e814c6b.png)
この方法ではなく、Windows Phone 8.1用の別のアプリケーションを近くに作成します。
Visual Studioで、[ 追加 ]-[ 新しいプロジェクト ] をクリックします。 プロジェクトテンプレートとして、 Blank Appを選択します。
![](https://habrastorage.org/getpro/habr/post_images/a27/571/add/a27571add87d378caa414102716a7222.png)
コードの移植
プロジェクトがMVVMを使用し、コードがインターフェイスから確実に分離され、補助クラスとオブジェクトが既に存在するポータブルクラスライブラリがあることは非常に幸運です。 これがない場合は、PCLでモデル、コントローラー、ロジックを取り出します。 下の画像の構造に近いものが得られます。
![](https://habrastorage.org/getpro/habr/post_images/c86/859/ae2/c86859ae2bde8756476d0fb229c18062.png)
完成したPCLをWindows Phone 8.1のプロジェクトに接続し、使用されている残りのライブラリを追加します。
![](https://habrastorage.org/getpro/habr/post_images/23d/700/f07/23d700f07572514e4acd91af399da331.png)
ここで、Windows Phone 8.0プロジェクトからファイルを慎重にコピーし、破損するすべてのものを排除する必要があります。 それは見かけほど速くはなく、むしろ日常的です。
コピーされたファイルでは、名前空間を変更して、ソリューションの競合を回避することをお勧めします。 これは、検索と置換機能を使用してすばやく実行できます。
![](https://habrastorage.org/getpro/habr/post_images/763/9dd/6ce/7639dd6ce83e0216372ed5e365eef0b8.png)
Windows Phone 8.0アプリケーションが複数の言語をサポートしており、リソースファイルをローカライズに使用した場合、8.1ではリソースフォルダーにそれらを残すことは不可能であることを知っておくことが重要です。 新しいリソースファイルを作成し 、そこにデータを転送する必要があります。
![](https://habrastorage.org/getpro/habr/post_images/265/3c1/475/2653c14755531a5fe962f8d96bf6542a.png)
インターフェイスの移行
アプリケーションをコンパイルして実行しようとすると、失敗します。 XAMLファイルのインターフェイス全体が誓います。 2ページのアプリケーションに44個のエラーがあります。
幸いなことに、これらはすべて汎用であり、名前空間、コントロール、またはそれらのプロパティに関連しています 。 新しいWindows Phone 8.1はWinRT を使用しており、Silverlight Toolkitで使用したコントロールとプロパティがない場合があります 。
![](https://habrastorage.org/getpro/habr/post_images/687/977/7ec/6879777ec151a6894a27b3d2daf155d3.png)
例:
- ページの開始タグは<phone:PhoneApplicationPage ...>ではなく、単に<Page ...>です。
- <phone:PhoneApplicationPage.Resources>の代わりに、 <Page.Resources>を使用します。
- 多くの標準スタイルは見つかりません。手動で再作成する必要があります。
- コントロールの一部のプロパティが変更されたか、まったく存在しません。
このプロセスの結果、私は2つのほぼ同一のアプリケーションを入手しました。 左側にWindows Phone 8.0、右側にWindows Phone 8.1。
![](https://habrastorage.org/getpro/habr/post_images/ab3/38b/242/ab338b242c63b5a0476b2b5b228ba20b.png)
Windowsストアプロジェクトの作成
Windows Phone 8.1アプリケーションが機能したら、さらに進んでWindowsストアアプリケーションに展開し、Windowsストアに公開 できます 。
このプロセスは、前のプロセスほど面倒ではありません。 プロジェクトのコンテキストメニューで[ Windows 8.1の追加 ]を選択する必要があります
![](https://habrastorage.org/getpro/habr/post_images/b23/f3c/54a/b23f3c54ae21e2d13ad7f65619033b44.png)
2つの新しいプロジェクトが作成されます。Windowsストアアプリケーション用のプロジェクトと、Windows 8.1とPhone 8.1アプリケーション間の共通コード用の共有プロジェクトです。
![](https://habrastorage.org/getpro/habr/post_images/295/993/35d/29599335dc9b6772cbd0044918adec4f.png)
ほとんどのコードを共有プロジェクトに転送し、xamlの一部をユーザーコントロールに変換して再利用できます。
![](https://habrastorage.org/getpro/habr/post_images/cd6/32d/379/cd632d379ff742126e5e8bad41546743.png)
Windowsアプリケーションを実行する場合、それは電話アプリケーションにも非常に似ているため、より便利な設計を別途行う必要があります。
![](https://habrastorage.org/getpro/habr/post_images/43c/bb6/b41/43cbb6b414e3e43ab1656cdefc0896ea.png)
おわりに
Windows Phone 8.0、Windows Phone 8.1、およびWindows Store 8.1の3つのアプリケーションがありました。
すべてのコードおよびその他の再利用ファイルは、Windows Phone 8.1およびWindowsストアプロジェクトから、共有コードまたはポータブルクラスライブラリ用の共有プロジェクトに移動されました。
Windows Phone 8.0のプロジェクトでは、コードの一部もPCLに送信されましたが、古いAPIを必要とするインターフェイスとすべての機能はこのプロジェクトに残りました。
完成したサンプルはこちらからダウンロードできます: Universal.zip
![](https://habrastorage.org/getpro/habr/post_images/3d0/f73/607/3d0f736077445c8785313c6893d41466.png)
便利なリンク
新しいWindows Phone 8.1。 アプリケーション開発者は何をすべきですか?
Windows Phone Silverlight 8.0アプリをWindows Phone Silverlight 8.1にアップグレードする
Windowsストアアプリをユニバーサルに変える
無料のオンラインテクノロジーコース
無料または試用版のVisual Studio 2013をダウンロードする
Windows Phoneアプリケーション開発者になる
Windows Phone 8.1の基本機能を備えたコード例(c#、c ++、javascript)