Soluções de problemas de portabilidade do Windows Phone Silverlight para a UWP

O tópico anterior era Portando o projeto.

É altamente recomendável ler este guia de portabilidade até o final, mas também entendemos que você esteja ansioso para avançar e chegar ao estágio em que o seu projeto é compilado e executado. Para essa finalidade, você pode fazer um progresso temporário comentando ou eliminando qualquer código não essencial e, em seguida, retornando para saldar esse débito mais tarde. A tabela de solução de problemas de sintomas e soluções deste tópico pode ser útil para você neste estágio, embora não seja uma substituição para a leitura dos próximos tópicos. Você sempre pode consultar novamente a tabela conforme avança pelos próximos tópicos.

Rastreando problemas

Exceções de análise XAML podem ser difíceis de diagnosticar, especialmente se não houver mensagens de erro significativas na exceção. Certifique-se de que o depurador esteja configurado para capturar exceções de primeira chance (para tentar e capturar a exceção de análise logo no início). Você pode inspecionar a variável de exceção no depurador para determinar se o HRESULT ou a mensagem tem informações úteis. Além disso, verifique na janela de saída do Visual Studio se há mensagens de erro de saída do analisador XAML.

Caso o aplicativo seja encerrado e tudo o que você sabe é que uma exceção sem tratamento foi lançada durante a análise da marcação XAML, isso pode ser o resultado de uma referência a um recurso não encontrado (ou seja, um recurso cuja chave existe para aplicativos do Windows Phone Silverlight, mas não para aplicativos do Windows 10, como algumas chaves de estilo TextBlock do sistema). Ou pode ser uma exceção gerada dentro de um UserControl, um controle personalizado ou um painel de layout personalizado.

Um último recurso é uma divisão binária. Remova cerca da metade da marcação de uma página e execute novamente o aplicativo. Em seguida, você saberá se o erro está em algum lugar dentro da metade que você removeu (que agora você deve restaurar em qualquer caso) ou na metade que não removeu. Repita o processo dividindo a metade que contém o erro e assim por diante, até zerar o problema.

TargetPlatformVersion

Esta seção explica o que fazer se, ao abrir um projeto do Windows 10 no Visual Studio, aparecer a mensagem "Atualização do Visual Studio necessária. Um ou mais projetos exigem um SDK <versão> da plataforma que não está instalado ou que faz parte de uma atualização futura do Visual Studio".

  • Primeiro, determine o número da versão do SDK do Windows 10 que você instalou. Navegue até C:\Arquivos de Programas (x86)\Windows Kits\10\Include\<versionfoldername> e anote versionfoldername>, que estará na notação quad, "Major.Minor.Build.Revision".<
  • Abra o arquivo do projeto para editar e encontre os elementos TargetPlatformVersion e TargetPlatformMinVersion. Edite-os para ter esta aparência, substituindo <versionfoldername> pelo número de versão de notação quad que você encontrou no disco:
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
   <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Solução de problemas de sintomas e soluções

As informações de solução da tabela destinam-se a dar instruções suficientes para você agir por conta própria. Você encontrará mais detalhes sobre cada um desses problemas durante a leitura dos tópicos posteriores.

Sintoma Medida
O analisador ou o compilador de XAML mostra o erro "O nome "<nome do tipo>" não existe no namespace […]." Se <nome do tipo> for um tipo personalizado, então, em suas declarações de prefixo de namespace na marcação XAML, altere "clr-namespace" para "using", e remova quaisquer tokens de assembly. Para tipos de plataforma, isso significa que o tipo não se aplica à UWP (Plataforma Universal do Windows), portanto, encontre o equivalente e atualize sua marcação. Exemplos que você pode encontrar imediatamente são phone:PhoneApplicationPage e shell:SystemTray.IsVisible.
O analisador ou compilador XAML fornece o erro "O membro "<membername>" não é reconhecido ou não está acessível." ou "A propriedade "<propertyname>" não foi encontrada no tipo [...].". Esses erros começarão a aparecer depois que você tiver portado alguns nomes de tipo, como a raiz Page. O membro ou a propriedade não se aplica à UWP, portanto, encontre o equivalente e atualize sua marcação. Exemplos que você pode encontrar imediatamente são SupportedOrientations e Orientation.
O analisador ou compilador XAML fornece o erro "A propriedade anexável [...] não foi encontrado [...]." ou "Membro anexável desconhecido [...].". Isso provavelmente é causado pelo tipo em vez da propriedade anexada; nesse caso, você já terá um erro para o tipo e esse erro desaparecerá depois que corrigir isso. Exemplos que você pode encontrar imediatamente são phone:PhoneApplicationPage.Resources e phone:PhoneApplicationPage.DataContext.
O analisador ou o compilador de XAML, ou uma exceção de tempo de execução, mostra o erro "O recurso "<resourcekey>" não pôde ser resolvido.". A chave do recurso não se aplica a aplicativos UWP (Plataforma Universal do Windows). Encontre o recurso equivalente correto e atualize sua marcação. Exemplos que você pode encontrar imediatamente são chaves de estilo de sistema TextBlock como PhoneTextNormalStyle.
O compilador C# mostra o erro "O nome do tipo ou do namespace '<nome>' não foi encontrado [...]" ou "O nome do tipo ou do namespace '<nome>' não existe no namespace [...]" ou "O nome do tipo ou do namespace '<nome>' não existe no contexto atual". Isso provavelmente significa que o compilador ainda não sabe o namespace correto da UWP para um tipo. Você pode usar o comando Resolver do Visual Studio para corrigir isso.
Se a API não está no conjunto de APIs, conhecido como a família de dispositivos universal (em outras palavras, a API é implementada em um SDK de extensão), então, use os SDKs de extensão.
Pode haver outros casos em que a portabilidade será menos direta. Exemplos que você pode encontrar imediatamente são DesignerProperties e BitmapImage.
Quando executado no dispositivo, o aplicativo é encerrado ou, quando iniciado do Visual Studio, você vê o erro "Não é possível ativar Windows Runtime aplicativo 8.x [...]. A solicitação de ativação falhou com o erro "O Windows não pôde se comunicar com o aplicativo de destino". Isso geralmente indica que o processo do aplicativo de destino foi anulado. […]”. O problema poderia ser o código imperativo sendo executado em suas próprias páginas ou em propriedades vinculadas (ou outros tipos) durante a inicialização. Ou, isso pode acontecer durante a análise do arquivo XAML prestes a ser exibido quando o aplicativo foi encerrado (se inicializado no Visual Studio, essa será a página de inicialização). Procure chaves de recurso inválidas e/ou tente algumas das diretrizes da seção Rastreando problemas neste tópico.
Erro XamlCompiler WMC0055: Não é possível atribuir o valor de texto '<sua geometria> de fluxo' na propriedade 'Clip' do tipo 'RectangleGeometry' Na UWP, o tipo do aplicativo Microsoft DirectX e XAML C++ UWP.
Erro de XamlCompiler WMC0001: tipo desconhecido 'RadialGradientBrush' no namespace XML [...] A UWP não tem o tipo RadialGradientBrush. Remova o RadialGradientBrush da marcação e usar algum outro tipo de aplicativo Microsoft DirectX e XAML C++ UWP.
Erro XamlCompiler WMC0011: membro desconhecido 'OpacityMask' no elemento '<UIElement type>' O aplicativo UWP UWP Microsoft DirectX e XAML C++.
Uma exceção de primeira chance do tipo 'System.Runtime.InteropServices.COMException' ocorreu em SYSTEM.NI.DLL. Informações adicionais: O aplicativo chamou uma interface que foi empacotada para um thread diferente. (Exceção de HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)). O trabalho que você está fazendo precisa ser feito no thread da interface do usuário. Chame o CoreWindow.GetForCurrentThread).
Uma animação está em execução, mas ela não está tendo efeito em sua propriedade de destino. Torne a animação independente ou defina EnableDependentAnimation="True" nela. Consulte Animação.
Ao abrir um projeto do Windows 10 no Visual Studio, você verá a mensagem "Atualização do Visual Studio necessária. Um ou mais projetos exigem um SDK <versão> da plataforma que não está instalado ou que faz parte de uma atualização futura do Visual Studio". Consulte a seção TargetPlatformVersion neste tópico.
Um System.InvalidCastException é gerado quando InitializeComponent é chamado em um arquivo xaml.cs. Isso pode acontecer quando você tem mais de um arquivo xaml (sendo que pelo menos um deles contém qualificadores MRT) que compartilham o mesmo arquivo xaml.cs e os elementos têm atributos x:Name inconsistentes entre os dois arquivos xaml. Tente adicionar o mesmo nome aos mesmos elementos nos dois arquivos xaml ou omita todos os nomes.

O próximo tópico é Portando XAML e a interface do usuário.