0

呼び出したいメソッド呼び出しは Windows Phone 8 でのみ使用でき、それ以前のバージョンでは使用できませんが、WP8 と WP7.1 のアプリを引き続きサポートしたいと考えています。

デバイスに WP8 がない場合は、フォールバックがあってもかまいません。

条件付きでメソッドを呼び出すようにアプリに指示し、コンパイル時エラーを削除することは可能ですか?

Android でこのようなことを実現するには (たとえば、Froyo 以前のデバイスをサポートするとします)、@TargetApi(Build.VERSION_CODES.FROYO)コンパイル時のチェックを回避するためにコードをラップし、必要なメソッドを呼び出す前に Android バージョンを明示的にチェックすることができます。

if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.ECLAIR_MR1)

Windows Phoneでこのようなことをすることは可能ですか?

+++++++++++++++++

更新: リフレクションを使用しようとしましたが失敗したため、正確な問題について説明しています。

実はNetworkInformationGetHostNames()から呼び出したい

アプリはWP7.1とWP8をターゲットにしているので、名前空間を参照できないようです

using Windows.Networking.Connectivity;

対応するアセンブリが参照されていないためです(と思います)。試してみましたが、この名前空間の一部であるアセンブリを見つけることができませんでした。

名前空間への有効な参照がなければ、リフレクションでさえ機能しないと思います。

Windows Phone と C# は初めてですが、環境が大好きなので、知識を求めてここに来ました。

4

1 に答える 1

3

両方のプラットフォームを適切にサポートするには、同じコード ファイルを参照し、異なるフレームワーク バージョンを対象とする 2 つの同一のプロジェクトを維持する必要があります。そして、それを行うと、次のことができます。

アプリケーション.csprojファイルを開き、<DefineConstants>要素を次の 2 行に変更します。

<DefineConstants Condition=" $(TargetFrameworkVersion) == 'v7.1' ">DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE;WP7</DefineConstants>
<DefineConstants Condition=" $(TargetFrameworkVersion) == 'v8.0' ">DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE;WP8</DefineConstants>

これをデバッグ構成とリリース構成の両方に適用する必要があります。

次に、次のように、WP8 固有のコードをプリプロセッサ ディレクティブでラップします。

#if WP8
    using Windows.Networking.Connectivity;
#endif

最後に、ビルド条件は、アセンブリ参照 include ステートメントにも適用できます。例:

<ItemGroup>
    <Reference Include="Microsoft.Advertising.Mobile, Version=6.2.959.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" Condition=" $(TargetFrameworkVersion) == 'v8.0' " />
</ItemGroup>
于 2013-10-26T11:10:52.303 に答える