我正在为Windows和xbox构建一个XNA 4.0应用程序。
在Windows版本中,我有一个调试控制台,它引用了紧凑框架中不支持的IronPython和一些CLR / DLR程序集。我还有一些引用这些项目的部分类。
我知道我可以从xbox项目中删除引用以保持兼容性。但是,我还需要删除引用这些项的类。问题是这些类是由需要它们的其他类实例化的,但仅适用于Windows。
这个窘境的明显解决方案就是在#if
预处理程序指令中包含对不支持的类的调用:
#if WINDOWS
InitializeScriptingEngine(....);
#endif
另外,我想我可以用同样的方式包装整个类/部分类,以防止编译。有一个更好的方法吗?我想避免使用预处理程序指令来编写代码。
此外,我似乎无法找到在解决方案范围内指定条件的方法。
答案 0 :(得分:1)
如果你正在使用Game Studio的内置功能“为Xbox 360创建项目副本”(同样适用于Zune和Windows Phone),那么将在项目之间镜像以下操作:
至关重要的是,以下操作未在项目之间进行镜像:
在MSDN上的Cross-Platform Game Project Converter页面上对此进行了解释(详细说明)。此过程由项目文件中的<XnaCrossPlatformGroupID>
元素控制。
结果是您只需从该平台上的项目中排除包含不相关类的文件。
我个人更喜欢在整个项目中散布#ifdef
,而不是在平台缺少某些功能的情况下创建备用存根类。如果你附加了一个[Conditional("NEVER_DEFINED")]
属性你的存根函数,那么编译器将删除对它们的调用。
我可以肯定的是,在Visual Studio中没有解决方案范围的方法来指定定义常量。