Compartir a través de


Solución de problemas de la migración de Windows Phone Silverlight a UWP

El tema anterior era Migración del proyecto.

Se recomienda leer hasta el final esta guía de migración, aunque somos conscientes de que estás deseando seguir avanzando y llegar a la fase de compilación y ejecución de tu proyecto. Con esto en mente, puedes avanzar temporalmente si comentas o quitas cualquier código que no sea esencial y más tarde regresas allí para restaurar lo que has quitado. La tabla de solución de problemas de síntomas y soluciones de este tema puede resultarte útil en esta etapa, aunque no sustituye la lectura de los siguientes temas. Siempre puedes consultar la tabla a medida que avances a través de los temas posteriores.

Seguimiento de problemas

Las excepciones de análisis XAML pueden ser difíciles de diagnosticar, especialmente si no hay ningún mensaje de error significativo dentro de la excepción. Asegúrate de que el depurador está configurado para capturar las primeras excepciones (para probar y capturar la excepción de análisis desde el principio). Podrás inspeccionar la variable de excepción en el depurador para determinar si el mensaje o HRESULT tiene información útil. Asimismo, consulta la ventana de salida de Visual Studio para comprobar si presenta mensajes de error emitidos por el analizador XAML.

Si tu aplicación finaliza y todo lo que sabes es que se produjo una excepción no controlada durante el análisis de marcado XAML, podría ser el resultado de una referencia a un recurso ausente (es decir, un recurso cuya clave existe para aplicaciones Windows Phone Silverlight pero no para aplicaciones de Windows 10 como, por ejemplo, algunas clave de estilo TextBlock del sistema). O bien, podría tratarse de una excepción producida dentro de un UserControl, un control personalizado o un panel de diseño personalizado.

Un último recurso es una división binaria. Quita aproximadamente la mitad del marcado de una página y vuelve a ejecutar la aplicación. A continuación, sabrá si el error está en algún lugar dentro de la mitad que ha quitado (que ahora debe restaurar en cualquier caso) o en la mitad que no ha quitado. Repite el proceso dividiendo la mitad que contiene el error y así sucesivamente, hasta que reduzcas a cero el problema.

TargetPlatformVersion

En esta sección se explica qué hacer si, al abrir un proyecto de Windows 10 en Visual Studio, aparece el mensaje "Se requiere una actualización de Visual Studio. Uno o varios proyectos requieren un platform SDK <versión> que no está instalado o se incluye como parte de una actualización futura de Visual Studio".

  • En primer lugar, determina el número de versión del SDK de Windows 10 que tienes instalada. Vaya a C:\Archivos de programa (x86)\Windows Kits\10\Include\<versionfoldername> y anote <versionfoldername>, que estará en notación cuádruple, "Major.Minor.Build.Revision".
  • Abre el archivo de proyecto para editar y buscar los elementos TargetPlatformVersion y TargetPlatformMinVersion. Edítelos para que parezcan así, reemplazando <versionfoldername> por el número de versión de notación cuádruple que encontró en el disco:
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
   <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Solución de problemas de síntomas y soluciones

La información de las soluciones de la tabla está destinada a ofrecerte información suficiente para aclarar tu mente. A medida que leas los temas posteriores, encontrarás más detalles sobre cada uno de estos problemas.

Síntoma Solución
El compilador o el analizador XAML muestra el error "El nombre "<nombreDeTipo>" no existe en el espacio de nombres [...]." Si <nombreDeTipo> es un tipo personalizado, en las declaraciones de prefijo del espacio de nombres del marcado XAML, cambia "clr-namespace" a "using" y quita los tokens de ensamblado. Para los tipos de plataforma, esto significa que el tipo no se aplica a la Plataforma universal de Windows (UWP), por lo que debes buscar el equivalente y actualizar el marcado. Los ejemplos que podrían surgir al instante son phone:PhoneApplicationPage y shell:SystemTray.IsVisible.
El analizador o compilador XAML da el error "El miembro "<membername>" no se reconoce o no es accesible". o "No se encontró la propiedad "<propertyname>" en el tipo [...].". Estos errores comenzarán a mostrarse después de haber migrado algunos nombres de tipo como, por ejemplo, la clase Page raíz. El miembro o la propiedad no se aplican a la UWP, por lo que debes buscar el equivalente y actualizar el marcado. Los ejemplos que podrían surgir al instante son SupportedOrientations y Orientation.
El compilador o el analizador XAML muestra los errores "No se encontró la propiedad [...] que se puede asociar [...]." o "Miembro que se puede asociar desconocido [...]". Es probable que la causa sea el tipo en lugar de la propiedad adjunta; en este caso, se mostrará un error de tipo, que desaparecerá al solucionarlo. Los ejemplos que podrían surgir al instante son phone:PhoneApplicationPage.Resources y phone:PhoneApplicationPage.DataContext.
El compilador o el analizador XAML (o una excepción en tiempo de ejecución) muestra el error "No se pudo resolver el recurso '<claveDeRecurso>'." La clave de recurso no se aplica a aplicaciones para la Plataforma universal de Windows (UWP). Busca el recurso equivalente correcto y actualiza el marcado. Algunos ejemplos que podrían surgir al instante son las claves de estilo TextBlock del sistema como, por ejemplo, PhoneTextNormalStyle.
El compilador de C# muestra el error "No se puede encontrar el tipo o el nombre de espacio de nombres '<nombre>' [...]" o "El tipo o el nombre del espacio de nombres '<nombre>' no existe en el espacio de nombres [...]" o "El tipo o el nombre del espacio de nombres '<nombre>' no existe en el contexto actual". Probablemente esto signifique que el compilador aún no conoce el espacio de nombres de UWP correcto para un tipo. Usa el comando Resolver de Visual Studio para corregirlo.
Si la API no está en el conjunto de API que se conoce como familia de dispositivos universales (en otras palabras, la API se implementa en un SDK de extensión), usa las SDK de extensión.
Puede haber otros casos en que la migración sea menos sencilla. Los ejemplos que podrían surgir al instante son DesignerProperties y BitmapImage.
Cuando se ejecuta en el dispositivo, la aplicación finaliza o cuando se inicia desde Visual Studio, aparece el error "No se puede activar Windows Runtime aplicación 8.x [...]. Error en la solicitud de activación con el error "Windows no pudo comunicarse con la aplicación de destino. Esto indica normalmente que se anuló el proceso de la aplicación de destino. […]”. El problema podría ser el código imprescindible que se ejecuta en tus propias páginas o en las propiedades enlazadas (u otros tipos) durante la inicialización. O bien, el problema podría producirse al analizar el archivo XAML que estaba a punto de mostrarse cuando la aplicación finalizó (si se inicia desde Visual Studio, es la página de inicio). Busque claves de recursos no válidas o pruebe algunas de las instrucciones de la sección Problemas de seguimiento de este tema.
Error de XamlCompiler WMC0055: No se puede asignar el valor de texto '<tu geometría de> flujo' a la propiedad 'Clip' del tipo 'RectangleGeometry' En UWP, el tipo de la aplicación para UWP de Microsoft DirectX y XAML C++.
Error de XamlCompiler WMC0001: tipo "RadialGradientBrush" desconocido en el espacio de nombres XML [...] UWP no tiene el tipo RadialGradientBrush. Quitar el RadialGradientBrush del marcado y usa cualquier otro tipo de aplicación para UWP de Microsoft DirectX y XAML C++.
Error de XamlCompiler WMC0011: miembro desconocido 'OpacityMask' en el elemento '<UIElement type>' La aplicación para UWP Microsoft DirectX y XAML de C++ para UWP.
La primera excepción del tipo 'System.Runtime.InteropServices.COMException' se produjo en SYSTEM.NI.DLL. Información adicional: la aplicación llamó a una interfaz que se aplanó para un subproceso diferente. (Excepción de HRESULT: 0x8001010E [RPC_E_WRONG_THREAD]). El trabajo que estés haciendo debe realizarse en el subproceso de interfaz de usuario. Llama al CoreWindow.GetForCurrentThread).
Hay una animación en ejecución, pero no tiene ningún efecto en su propiedad de destino. Haz que la animación sea independiente o establece EnableDependentAnimation="True" en ella. Consulta Animación.
Al abrir un proyecto de Windows 10 en Visual Studio, aparece el mensaje "Se requiere una actualización de Visual Studio. Uno o varios proyectos requieren un platform SDK <versión> que no está instalado o se incluye como parte de una actualización futura de Visual Studio". Consulta la sección TargetPlatformVersion en este tema.
Se genera una excepción System.InvalidCastException cuando se llama a InitializeComponent en un archivo xaml.cs. Esto puede ocurrir cuando tienes más de un archivo xaml (al menos uno de los cuales está calificado como MRT) que comparten el mismo archivo xaml.cs y los elementos tienen atributos x:Name que no son coherentes entre los dos archivos xaml. Intenta agregar el mismo nombre a los mismos elementos en los dos archivos xaml u omite los nombres por completo.

El siguiente tema es Migración de XAML y la interfaz de usuario.