XNA - 有条件地包含基于目标平台的对象

时间:2010-11-12 18:35:22

标签: c# conditional-compilation xna-4.0

我正在为Windows和xbox构建一个XNA 4.0应用程序。

在Windows版本中,我有一个调试控制台,它引用了紧凑框架中不支持的IronPython和一些CLR / DLR程序集。我还有一些引用这些项目的部分类。

我知道我可以从xbox项目中删除引用以保持兼容性。但是,我还需要删除引用这些项的类。问题是这些类是由需要它们的其他类实例化的,但仅适用于Windows。

这个窘境的明显解决方案就是在#if预处理程序指令中包含对不支持的类的调用:

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

另外,我想我可以用同样的方式包装整个类/部分类,以防止编译。有一个更好的方法吗?我想避免使用预处理程序指令来编写代码。

此外,我似乎无法找到在解决方案范围内指定条件的方法。

1 个答案:

答案 0 :(得分:1)

如果你正在使用Game Studio的内置功能“为Xbox 360创建项目副本”(同样适用于Zune和Windows Phone),那么将在项目之间镜像以下操作:

  • 添加新项目
  • 添加现有项目
  • 重命名
  • 删除

至关重要的是,以下操作未在项目之间进行镜像

  • 从项目中排除
  • 更改参考和内容参考

在MSDN上的Cross-Platform Game Project Converter页面上对此进行了解释(详细说明)。此过程由项目文件中的<XnaCrossPlatformGroupID>元素控制。

结果是您只需从该平台上的项目中排除包含不相关类的文件。

我个人更喜欢在整个项目中散布#ifdef,而不是在平台缺少某些功能的情况下创建备用存根类。如果你附加了一个[Conditional("NEVER_DEFINED")]属性你的存根函数,那么编译器将删除对它们的调用。

我可以肯定的是,在Visual Studio中没有解决方案范围的方法来指定定义常量。