如何基于要从 UWP、iOS 和 Android 使用的 MonoGame 创建 class 库

How to create a class library based on MonoGame to be used from UWP, iOS, and Android

我已经安装了 VisualStudio 2015、Xamarin 和 MonoGame 3.5。我将为 Windows UWP、iOS 和 Android.

构建我的 XNA 应用程序

我有一些基于 XNA 的库...我需要为三个目标系统(Windows UWP、iOS 和 Android)构建它们,但是无法为 Windows UWP 创建库。我尝试创建一个MonoGame Windows 10 Universal Project,但是这样的项目无法转换生成DLL。

我也曾尝试创建一个 Class Library (Universal Windows) 项目,但后来我无法将 MonoGame.Framework 添加到引用中。

我在创建 MonoGame Android Project 时遇到了同样的问题...无法切换到库项目。唯一可以修改为库项目的 MonoGame 项目是 MonoGame iOS Project

也就是说,我如何创建一个基于 XNA (MonoGame) 的 class 库以供 UWP、iOS 和 Android 使用?

据我所知,您在这里只有 2 个选项。

我并没有真正使用过共享项目。我对它们的理解是,它们允许您在多个项目之间共享代码,就好像它存在于一个库中一样,但实际上它被直接编译到引用项目中。它们可以被认为是高级文件链接。

便携式 Class 库有点不同。我在 MonoGame.Extended 项目中使用它们并取得了巨大成功,但这并不总是那么容易。它们的工作方式是提供适用于所有目标平台的功能子集。它们编译为可被任何项目引用的 DLL,您可以确信代码是相同的。

使用 PCL 有几个缺点:

  • 您只能使用一部分功能。令人惊讶的是,这并不经常妨碍。
  • 如果 PCL 引用另一个库,它也必须是 PCL。

第二点是 MonoGame 的问题。通常,MonoGame 未作为 PCL 发布,但 PCL 版本已经 published on NuGet 可以使用。

就目前而言,NuGet 包是官方发布后的版本,但令人惊讶的是,这并不重要,因为它是一个 bait and switch PCL,这实际上意味着它只是提供接口到在运行时使用的真实 DLL。换句话说,即使 PCL 是 3.2 版,只要界面没有改变,您的游戏仍然会愉快地引用 3.5 版。

3.6版本some talk改善了这种情况

我注意到默认情况下,MonoGame 项目是使用 .Net 4.5 构建的。常规 class 库默认为最新安装的 .Net 版本,在我的例子中是 4.5.2。通过转到其项目属性并将目标框架设置为 4.5,我能够引用常规 class 库。希望这有帮助。