我正在尝试开发跨平台应用程序。 目前我已经设置了以下解决方案,其平台指定了模板:
Windows,Xbox和WindowsPhone使用GameBase作为参考,但我想为GameBase库中使用的每个平台分隔不同的代码,如下例所示:
#if WINDOWS graphics.PreferredBackBufferWidth = 640; graphics.PreferredBackBufferHeight = 480; graphics.ApplyChanges(); #elif WINDOWS_PHONE TargetElapsedTime = TimeSpan.FromTicks(333333); InactiveSleepTime = TimeSpan.FromSeconds(1); #endif
它不起作用,我可以看到在配置管理器中,GameBase的平台是任何CPU,所以我想知道它是否有任何应对GameBase是一个类库?
如果是,我如何解决它,如果可能的话,我想保留#if标签。
目录设置| Windows解决方案Game.cs | Solution Explorer
答案 0 :(得分:3)
您必须为不同的平台创建单独的Visual Studio项目。您可以使用添加为链接添加源,从而在多个项目中重复使用代码。在链接到多个项目的共享源文件中,您可以使用#if
等来分隔特定于平台的代码。
你的问题并不清楚“它不起作用”,但一般来说你不能为Windows构建一个程序集(例如类库),然后在XBox和Windows Phone上使用它。
答案 1 :(得分:1)
在不同项目类型之间共享项目是一项棘手的事情 - 仅仅因为使用了Visual Studio项目类型的方式,并且因为不同的项目类型实际上需要引用不同版本的dot net框架。
有一些事情可以提供帮助:
希望有所帮助。就个人而言,我目前主要使用手动剪切和粘贴,并希望下一版本的便携式类库有所帮助(它应该归功于Win8 Metro的东西)
答案 2 :(得分:0)
不确定这是否是您唯一的问题,但是您错误地打动了WINDOWS_PHONE:
WINDOWS_HPONE
应该是:
WINDOWS_PHONE
更新:
我这样做的方法是创建一个类库解决方案,调用类似GameBaseLibrary的方法。然后创建一个名为GameBase的项目,并在其中添加您想要在所有平台上共享的所有代码。 (I.E.物理,数据访问等......)
然后在同一个解决方案中添加XboxBaseLibrary,WindowsBaseLibrary,WindowsPhoneBaseLibrary并添加特定于每个平台的代码,将每个项目中的引用添加到GameBase项目中,以便在其他三个项目中使用其中的代码。 / p>
然后创建3种不同的解决方案类型--Xbox,Window,Windows Phone,并将GameBaseLibrary中编译的dll作为参考添加到其中,以便能够使用代码。当你正在处理每个版本的代码(xbox,windows,windows phone)时,要注意你输入的代码,以确保它不是可以存在于GameBase类中的东西,因为你不想继续重写相同的代码。
这样,大部分代码都位于GameBaseLibrary中,平台特定代码位于其他3个项目中。
我希望这很清楚。