Compartir a través de


Solución de problemas de migración de Windows Runtime 8.x a UWP

El tema anterior fue Portabilidad del proyecto.

Recomendamos encarecidamente leer esta guía de portabilidad hasta el final, pero también entendemos que está ansioso por avanzar y llegar a la fase en la que su proyecto se compila y se ejecuta. Para ello, puede realizar un progreso temporal comentando o eliminando temporalmente cualquier código no esencial y luego resolver esa deuda más adelante. La tabla de síntomas y soluciones de problemas de este tema puede resultarle útil en este punto, aunque no sustituye la lectura de los próximos temas. Siempre puedes consultar la tabla mientras avanzas en 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úrese de que el depurador está configurado para detectar excepciones de primera oportunidad (para intentar detectar la excepción de análisis al principio). Es posible que pueda inspeccionar la variable de excepción en el depurador para determinar si el HRESULT o el mensaje tienen información útil. Además, compruebe la ventana de salida de Visual Studio para ver los mensajes de error que genera 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, podría ser el resultado de una referencia a un recurso que falta (es decir, un recurso cuya clave existe para aplicaciones universales 8.1, pero no para aplicaciones Windows 10, como algunas claves de estilo de sistema TextBlock). 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 quitar. Repita el proceso dividiendo la mitad que contiene el error, y así sucesivamente, hasta que hayas identificado 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 un SDK de plataforma <versión> que no está instalado 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 tome nota de <versionfoldername>, que estará en notación cuádruple, "Major.Minor.Build.Revision".
  • Abra el archivo del proyecto para editar y busque los elementos TargetPlatformVersion y TargetPlatformMinVersion. Edítelos para que tengan este aspecto, reemplazando <versionfoldername> por el número de versión en notación cuádruple que usted encontró en el disco.
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
    <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Diagnóstico 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 Remedio
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 un SDK de plataforma <versión> que no está instalado 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.
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 [...]. La solicitud de activación falló con el error "Windows no pudo comunicarse con la aplicación de destino." Esto suele indicar que el proceso de la aplicación de destino se interrumpió. [...]". 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 "Seguimiento de problemas" de este tema.
El analizador o compilador XAML, o una excepción en tiempo de ejecución, da el error "El recurso "<resourcekey>" no se pudo resolver.". La clave de recurso no se aplica a las aplicaciones de la Plataforma universal de Windows (UWP) (este es el caso con algunos recursos de Windows Phone, por ejemplo). Busque el recurso equivalente correcto y actualice el marcado. Algunos ejemplos que podría encontrar inmediatamente son claves del sistema, como PhoneAccentBrush.
El compilador de C# da el error "No se encontró el nombre de tipo o espacio de nombres '<nombre>' [...]" o "El tipo o el nombre del espacio de nombres '<nombre>' no existe en el espacio de nombres [...]" o "El nombre de tipo o espacio de nombres '<nombre>' no existe en el contexto actual". Es probable que esto signifique que el tipo se implemente en una SDK de extensión (aunque puede haber casos en que la solución no sea tan simple). Use la API de Windows contenido de referencia para determinar qué SDK de extensión implementa la API y, a continuación, use el comando de Visual Studio Add>Reference para agregar una referencia a ese SDK al proyecto. Si la aplicación tiene como destino el conjunto de API conocidas como la familia de dispositivos universales, es fundamental que use la clase ApiInformation para probar en tiempo de ejecución la presencia del SDK de extensión antes de llamarlas (esto se denomina código adaptable). Si existe una API universal, siempre es preferible a una API en un SDK de extensión. Para obtener más información, consulta Kit de Desarrollo de Software de extensión.

El tema siguiente es Migración de XAML y UI.