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):
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:
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:
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).
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