2010-11-12 4 views
1

Je construis une application XNA 4.0 pour Windows et la xbox.XNA - Inclure conditionnellement objet basé sur la plate-forme cible

Dans la version Windows, j'ai une console de débogage qui référence IronPython et certains assemblys CLR/DLR qui ne sont pas pris en charge dans l'infrastructure compacte. J'ai aussi quelques classes partielles qui font référence à ces éléments. Je sais que je peux supprimer des références du projet xbox pour maintenir la compatibilité. Cependant, j'ai également besoin de supprimer les classes qui référencent ces éléments. Le problème est que ces classes sont instanciées par d'autres classes qui en ont besoin, mais uniquement pour Windows.

La solution évidente à ce dilemme est juste pour envelopper les appels vers les classes non pris en charge dans #if directives de préprocesseur:

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

Aussi, je suppose que je pourrais envelopper toute une classe/classe partielle de la même façon de le garder d'être compilé. Y a-t-il une meilleure manière de faire cela? Je voudrais éviter de pepper le code avec des directives de préprocesseur.

En outre, je n'arrive pas à trouver un moyen de spécifier des conditions générales sur une base de toute la solution.

Répondre

1

Si vous utilisez la fonctionnalité intégrée de Game Studio pour « Créer une copie du projet pour Xbox 360 » (idem pour Zune Phone et Windows), les opérations suivantes seront en miroir entre les projets:

  • Ajouter un nouvel élément
  • Ajouter un élément existant
  • Renommer
  • Supprimer

Fondamentalement, op suivant érations sont pas mis en miroir entre les projets:

  • Excluez De Projet
  • Modification des références et des références de contenu

Ceci est expliqué (avec beaucoup plus de détails) sur la page Cross-Platform Game Project Converter sur MSDN . Ce processus est contrôlé par l'élément <XnaCrossPlatformGroupID> dans les fichiers de projet. Le résultat est que vous pouvez simplement exclure les fichiers contenant les classes non pertinentes de votre projet sur cette plate-forme. Personnellement, je préfère, au lieu de disperser #ifdef dans mon projet, de créer des classes de remplacement de remplacement dans les cas où une plate-forme manque de certaines fonctionnalités. Et si vous attribuez un attribut [Conditional("NEVER_DEFINED")] à vos fonctions de remplacement, le compilateur supprimera les appels.

Je suis raisonnablement certain qu'il n'y a pas de manière à l'échelle de la solution de spécifier des constantes de définition dans Visual Studio.

+0

Grande réponse; Merci. –

Questions connexes