Cómo crear una biblioteca de classs basada en MonoGame para usar desde UWP, iOS y Android

He instalado VisualStudio 2015, Xamarin y MonoGame 3.5. Voy a build mi aplicación XNA para Windows UWP, iOS y Android.

Tengo algunas bibliotecas basadas en XNA … y necesito buildlas para los tres sistemas de destino (Windows UWP, iOS y Android), pero no hay manera de crear una biblioteca para Windows UWP. Intenté crear un MonoGame Windows 10 Universal Project , pero este proyecto no se puede convertir para generar una DLL.

También intenté crear un proyecto de la Class Library (Universal Windows) , pero no pude agregar MonoGame.Framework a las references.

Tengo el mismo problema al crear un MonoGame Android Project … no hay forma de cambiar a un proyecto de biblioteca. El único proyecto MonoGame que se puede modificar para ser un proyecto de biblioteca es MonoGame iOS Project .

Dicho esto, ¿cómo puedo crear una biblioteca de classs basada en XNA (MonoGame) para usar desde UWP, iOS y Android?

Por lo que sé, solo tienes 2 opciones aquí.

  • Bibliotecas portátiles de class
  • Proyectos compartidos

Realmente no he usado muchos proyectos compartidos. La forma en que los entiendo es que le permiten compartir código entre múltiples proyectos como si viviera en una biblioteca, pero en realidad se comstack directamente en el proyecto de reference. Se les puede considerar como un enlace de files avanzado.

Las bibliotecas portátiles de class son un poco una bestia diferente. Los he usado en el proyecto MonoGame.Extended con gran éxito, pero no siempre fue fácil. La forma en que funcionan es proporcionar un subset de funcionalidad que funciona en todas las plataforms de destino. Se comstackn a una DLL a la que todos los proyectos pueden hacer reference y puede estar seguro de que el código será el mismo.

Hay algunas desventajas de usar una PCL:

  • Solo puedes usar un subset de funciones. Sorprendentemente, esto no se interpone con demasiada frecuencia.
  • si la PCL hace reference a otra biblioteca, también tiene que ser una PCL.

El segundo punto es donde las cosas se ponen un poco difíciles con MonoGame. Normalmente, MonoGame no se envía como PCL, pero se ha publicado una versión PCL en NuGet que se puede utilizar.

Tal como está ahora, el package NuGet es una versión detrás de la versión oficial pero, sorprendentemente, eso realmente no importa porque es un cebo y cambia PCL, lo que significa que simplemente proporciona la interfaz a la DLL real que se utiliza en time de ejecución. En otras palabras, su juego seguirá siendo feliz reference a la versión 3.5, incluso si la PCL es la versión 3.2, siempre que la interfaz no haya cambiado.

Se habla de mejorar esta situación en la versión 3.6.

Me di count de que los proyectos MonoGame se crean utilizando .Net 4.5 de forma pnetworkingeterminada. Las bibliotecas ordinarias de class pnetworkingeterminan la última versión instalada de .Net que en mi caso fue 4.5.2. Pude hacer reference a una biblioteca de classs normal yendo a las properties de su proyecto y estableciendo el marco de destino a 4.5. Espero que esto ayude.