代码之家  ›  专栏  ›  技术社区  ›  3Dave

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

  •  1
  • 3Dave  · 技术社区  · 14 年前

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

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

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

    解决这一难题的明显方法是将对不受支持类的调用包装在 #if 预处理器指令:

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

    另外,我想我可以用同样的方法包装整个类/部分类,以防止它被编译。有更好的办法吗?我想避免在代码中添加预处理器指令。

    而且,我似乎找不到在解决方案范围内指定条件的方法。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Andrew Russell    14 年前

    如果您正在使用Game Studio的内置功能“为Xbox 360创建项目副本”(Zune和Windows Phone也是如此),则以下操作将在项目之间镜像:

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

    关键的是,以下操作是 未在项目之间镜像 :

    • 从项目中排除
    • 更改引用和内容引用

    这在 Cross-Platform Game Project Converter MSDN上的页面。此过程由 <XnaCrossPlatformGroupID> 项目文件中的元素。

    结果是,您可以简单地从该平台上的项目中排除包含不相关类的文件。

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

    我相当肯定,在Visual Studio中,没有一种解决方案范围内的方法可以指定define常量。