Compartir a través de


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

El tema anterior era Portar el proyecto.

Se recomienda leer al final de esta guía de portabilidad, pero también sabemos que está ansioso por avanzar y llegar a la fase en la que se compila y se ejecuta el proyecto. Para ello, puede realizar un progreso temporal mediante comentarios o código auxiliar de cualquier código no esencial y, a continuación, volver a pagar esa deuda más adelante. La tabla de solución de problemas de síntomas y remedios de este tema puede resultarle útil en esta fase, aunque no es un sustituto de leer los siguientes temas. Siempre puede hacer referencia a la tabla a medida que avanza 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 la aplicación finaliza y todo lo que sabe es que se produjo una excepción no controlada durante el análisis de marcado XAML, eso podría ser el resultado de una referencia a un recurso que falta (es decir, un recurso cuya clave existe para Windows Phone aplicaciones de Silverlight, pero no para aplicaciones de Windows 10, como algunas claves de estilo TextBlock del sistema). O bien, podría ser 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. Quite aproximadamente la mitad del marcado de una página y vuelva a ejecutar la aplicación. A continuación, sabrá si el error está en algún lugar dentro de la mitad que quitó (que ahora debe restaurar en cualquier caso) o en la mitad que no se quitó. 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, verá el mensaje "Se requiere la actualización de Visual Studio. Uno o varios proyectos requieren una versión> del SDK <de plataforma que no está instalada o que se incluye como parte de una actualización futura de Visual Studio".

  • En primer lugar, determine el número de versión del SDK para Windows 10 que ha instalado. 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".
  • Abra el archivo del proyecto para editar y buscar los TargetPlatformVersion elementos 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 remedios

La información de remedio de la tabla está pensada para proporcionarle suficiente información para desbloquearse. Encontrará más detalles sobre cada uno de estos problemas a medida que lea los temas posteriores.

Síntoma Solución
El analizador o compilador XAML da el error "El nombre "<typename>" no existe en el espacio de nombres [...]. Si <typename> es un tipo personalizado, en las declaraciones de prefijo de espacio de nombres en el marcado XAML, cambie "clr-namespace" a "using" y quite los tokens de ensamblado. En el caso de los tipos de plataforma, esto significa que el tipo no se aplica a la Plataforma universal de Windows (UWP), por lo que busca el marcado equivalente y actualiza el marcado. Ejemplos que podría encontrar inmediatamente 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 aparecer después de migrar algunos nombres de tipo, como la página raíz. El miembro o la propiedad no se aplican a UWP, por lo que busca el equivalente y actualiza el marcado. Ejemplos que podría encontrar inmediatamente son SupportedOrientations y Orientation.
El analizador o compilador XAML da el error "La propiedad adjuntable [...] no se encontró [...]. o "Miembro adjuntable desconocido [...].". Es probable que esto se deba al tipo en lugar de a la propiedad adjunta; en cuyo caso, ya tendrá un error para el tipo y este error desaparecerá una vez que lo corrija. Ejemplos que podría encontrar inmediatamente son phone:PhoneApplicationPage.Resources y phone:PhoneApplicationPage.DataContext.
El analizador o compilador XAML, o una excepción en tiempo de ejecución, proporciona el error "No se pudo resolver el recurso "<resourcekey>". La clave de recurso no se aplica a las aplicaciones de Plataforma universal de Windows (UWP). Busque el recurso equivalente correcto y actualice el marcado. Algunos ejemplos que podría encontrar inmediatamente son las claves de estilo TextBlock del sistema, como PhoneTextNormalStyle.
El compilador de C# da el error "No se encontró el nombre de tipo o espacio de nombres '<name>' [...]" o "El nombre de tipo o espacio de nombres '<name>' no existe en el espacio de nombres [...]" o "El nombre de tipo o espacio de nombres '<name>' no existe en el contexto actual". Es probable que esto significa que el compilador aún no conoce el espacio de nombres de UWP correcto para un tipo. Use el comando Resolve de Visual Studio para corregirlo.
Si la API no está en el conjunto de API conocidas como la familia de dispositivos universales (es decir, la API se implementa en un SDK de extensión), use los SDK de extensión.
Puede haber otros casos en los que el puerto sea menos sencillo. Ejemplos que podría encontrar inmediatamente 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 la aplicación Windows Runtime 8.x [...]. No se pudo comunicar la solicitud de activación con el error "Windows no pudo comunicarse con la aplicación de destino. Esto suele indicar que se anuló el proceso de la aplicación de destino. […]”. El problema podría ser el código imperativo que se ejecuta en sus propias páginas o en propiedades enlazadas (u otros tipos) durante la inicialización. O bien, podría ocurrir al analizar el archivo XAML a punto de mostrarse cuando finalice la aplicación (si se inicia desde Visual Studio, será 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 "<la geometría> de flujo" a la propiedad "Clip" del tipo "RectangleGeometry". En UWP, el tipo de aplicación para UWP de Microsoft DirectX y XAML en C++.
Error de XamlCompiler WMC0001: Tipo desconocido 'RadialGradientBrush' en el espacio de nombres XML [...] UWP no tiene el tipo RadialGradientBrush . Quite radialGradientBrush del marcado y use algún 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.
Se produjo una primera excepción de tipo "System.Runtime.InteropServices.COMException" 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á realizando debe realizarse en el subproceso de la interfaz de usuario. Llame a CoreWindow.GetForCurrentThread).
Se está ejecutando una animación, pero no tiene ningún efecto en su propiedad de destino. Haga que la animación sea independiente o establézcala EnableDependentAnimation="True" . Consulta Animación.
Al abrir un proyecto de Windows 10 en Visual Studio, verá el mensaje "Se requiere la actualización de Visual Studio. Uno o varios proyectos requieren una versión> del SDK <de plataforma que no está instalada o que se incluye como parte de una actualización futura de Visual Studio". Consulte la sección TargetPlatformVersion de este tema.
Se produce 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 con MRT) que comparten el mismo archivo y elementos xaml.cs tienen atributos x:Name que son incoherentes entre los dos archivos xaml. Intente agregar el mismo nombre a los mismos elementos en ambos archivos xaml o omita nombres por completo.

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