Configuración de proyectos de Windows

Adición de nuevos proyectos de Windows a una solución existente Xamarin.Forms

Las soluciones anteriores Xamarin.Forms (o las creadas en macOS) no tendrán proyectos de aplicaciones para la Plataforma universal de Windows (UWP). Por lo tanto, deberá agregar manualmente un proyecto de UWP para compilar una aplicación Windows 10 (UWP).

Adición de una aplicación de la Plataforma universal de Windows

Se recomienda Visual Studio 2019 en Windows 10 para compilar aplicaciones para UWP. Para obtener más información sobre la Plataforma universal de Windows, consulte Introducción a la Plataforma universal de Windows.

UWP está disponible en Xamarin.Forms 2.1 y versiones posteriores, y Xamarin.Forms. Maps se admite en Xamarin.Forms 2.2 y versiones posteriores.

Consulte la sección de solución de problemas para obtener sugerencias útiles.

Siga estas instrucciones para agregar una aplicación para UWP que se ejecutará en teléfonos, tabletas y escritorios de Windows 10:

1 . Haga clic con el botón derecho en la solución y seleccione Agregar > Nuevo proyecto... y agregue un proyecto de Aplicación vacía (Windows universal):

Add New Project Dialog

2 . En el cuadro de diálogo Nuevo proyecto de plataforma universal de Windows, seleccione las versiones mínimas y de destino de Windows 10 en las que se ejecutará la aplicación:

New Universal Windows Platform Project Dialog

3. Haga clic con el botón derecho en el proyecto para UWP y seleccione Administrar paquetes NuGet... y agregue el paquete Xamarin.Forms. Asegúrese de que los demás proyectos de la solución también se actualizan a la misma versión del paquete Xamarin.Forms.

4. Asegúrese de que el nuevo proyecto de UWP se compilará en la ventana Compilación > Administrador de configuración (probablemente no haya ocurrido de forma predeterminada). Marque los cuadros Compilar e Implementar para el proyecto universal:

Configuration Manager Window

5. Haga clic con el botón derecho en el proyecto y seleccione Agregar > Referencia y cree una referencia al proyecto de aplicación de Xamarin.Forms (Proyecto compartido o estándar de .NET).

Reference Manager Dialog

6. En el proyecto de UWP, edite App.xaml.cs para incluir la llamada al método Init dentro del método OnLaunched alrededor de la línea 52:

// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter

7. En el proyecto de UWP, edite MainPage.xaml quitando el Grid contenido en el elemento Page.

8. En MainPage.xaml, agregue una nueva entrada de xmlns para Xamarin.Forms.Platform.UWP:

xmlns:forms="using:Xamarin.Forms.Platform.UWP"

9. En MainPage.xaml, cambie el elemento de raíz <Page a <forms:WindowsPage:

<forms:WindowsPage
...
   xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>

10. En el proyecto de UWP, edite MainPage.xaml.cs para quitar el especificador de herencia de : Page para el nombre de clase (ya que ahora heredará de WindowsPage debido al cambio realizado en el paso anterior):

public sealed partial class MainPage  // REMOVE ": Page"

11. En MainPage.xaml.cs, agregue la llamada LoadApplication en el constructor MainPage para iniciar la aplicación Xamarin.Forms:

// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());

Nota:

El argumento para el método LoadApplication es la instancia de Xamarin.Forms.Application definida en el proyecto estándar de .NET.

12. Agregue los recursos locales (por ejemplo, archivos de imagen) de los proyectos de plataforma existentes necesarios.

Solución de problemas

"Excepción de invocación de destino" al usar "Compilar con la cadena de herramientas nativa de .NET"

Si la aplicación para UWP hace referencia a varios ensamblados (por ejemplo, bibliotecas de control de terceros o la propia aplicación se divide en varias bibliotecas), es posible que Xamarin.Forms no pueda cargar objetos de esos ensamblados (como representadores personalizados).

Esto puede ocurrir al usar Compilar con la cadena de herramientas nativa de .NET que es una opción para las aplicaciones para UWP en la ventana Propiedades > Compilación > General del proyecto.

Puede corregirlo usando una sobrecarga específica de UWP de la llamada Forms.Init en App.xaml.cs como se muestra en el código siguiente (debe reemplazar ClassInOtherAssembly por una clase real a la que hace referencia el código):

// You'll need to add `using System.Reflection;`
List<Assembly> assembliesToInclude = new List<Assembly>();

// Now, add in all the assemblies your app uses
assembliesToInclude.Add(typeof (ClassInOtherAssembly).GetTypeInfo().Assembly);

// Also do this for all your other 3rd party libraries
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
// replaces Xamarin.Forms.Forms.Init(e);

Agregue una entrada para cada ensamblado que haya agregado como referencia en el Explorador de soluciones, ya sea a través de una referencia directa o de NuGet.

Servicios de dependencia y compilación nativa de .NET

Las compilaciones de versión que usan la compilación nativa de .NET pueden no resolver los servicios de dependencia definidos fuera del ejecutable principal de la aplicación (por ejemplo, en un proyecto o biblioteca independientes).

Use el método DependencyService.Register<T>() para registrar manualmente clases de servicio de dependencia. En función del ejemplo anterior, agregue el método register de la siguiente manera:

Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this