1

WindowsとXboxの両方に対応したXNA4.0アプリを構築しています。

Windowsバージョンでは、IronPythonと、コンパクトフレームワークでサポートされていないいくつかのCLR/DLRアセンブリを参照するデバッグコンソールがあります。それらのアイテムを参照する部分的なクラスもいくつかあります。

互換性を維持するために、xboxプロジェクトから参照を削除できることを知っています。ただし、それらのアイテムを参照するクラスも削除する必要があります。問題は、それらのクラスがそれらを必要とする他のクラスによってインスタンス化されることですが、Windowsの場合のみです。

この難問に対する明らかな解決策は、サポートされていないクラスへの呼び出しを#ifプリプロセッサディレクティブでラップすることです。

#if WINDOWS
  InitializeScriptingEngine(....);
#endif

また、クラス全体/部分クラスを同じ方法でラップして、コンパイルされないようにすることもできると思います。これを行うためのより良い方法はありますか?プリプロセッサディレクティブでコードをペッパーするのは避けたいです。

また、ソリューション全体で条件を指定する方法が見つからないようです。

4

1 に答える 1

1

「Xbox360用のプロジェクトのコピーを作成する」(ZuneおよびWindows Phone用)にGame Studioの組み込み機能を使用している場合、次の操作がプロジェクト間でミラーリングされます。

  • 新しいアイテムを追加
  • 既存のアイテムを追加
  • 名前を変更
  • 消去

重要なのは、次の操作がプロジェクト間でミラーリングされていないことです。

  • プロジェクトから除外
  • 参照とコンテンツ参照の変更

これは、MSDNのCross-Platform Game Project Converterページで(より詳細に)説明されています。このプロセスは<XnaCrossPlatformGroupID>、プロジェクトファイルの要素によって制御されます。

結果として、無関係なクラスを含むファイルをそのプラットフォームのプロジェクトから単純に除外できます。

個人的には、プロジェクト全体に分散するのではなく#ifdef、プラットフォームに一部の機能がない場合に代替スタブクラスを作成することを好みます。また、スタブ関数の属性をアタッチする[Conditional("NEVER_DEFINED")]と、コンパイラはそれらへの呼び出しを削除します。

VisualStudioで定義定数を指定するソリューション全体の方法はないと合理的に確信しています。

于 2010-11-13T01:08:00.517 に答える