Solução de problemas de portabilidade do Windows Phone Silverlight para UWP
O tópico anterior foi Portabilidade do projeto.
É altamente recomendável ler até o final deste guia de portabilidade, mas também entendemos que você está ansioso para seguir em frente e chegar ao estágio em que seu projeto é compilado e executado. Para esse fim, você pode fazer progressos temporários comentando ou eliminando qualquer código não essencial e, em seguida, retornando para pagar essa dívida mais tarde. A tabela de solução de problemas de sintomas e soluções neste tópico pode ser útil para você neste estágio, embora não substitua a leitura dos próximos tópicos. Você sempre pode consultar a tabela à medida que avança nos tópicos posteriores.
Rastreando problemas
As exceções de análise XAML podem ser difíceis de diagnosticar, especialmente se não houver mensagens de erro significativas dentro da 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.
Se o seu aplicativo for encerrado e tudo o que você souber for que uma exceção sem tratamento foi lançada durante a análise de marcação XAML, isso pode ser o resultado de uma referência a um recurso ausente (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 de bloco de texto do sistema). Ou pode ser uma exceção lançada dentro de um UserControl, um controle personalizado ou um painel de layout personalizado.
Um último recurso é uma divisão binária. Remova cerca de metade da marcação de uma página e execute novamente o aplicativo. Você saberá então 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 você não removeu. Repita o processo dividindo a metade que contém o erro e assim por diante, até zerar o problema.
Versão da plataforma de destino
Esta seção explica o que fazer se, ao abrir um projeto do Windows 10 no Visual Studio, você vir a mensagem "Atualização do Visual Studio necessária. Um ou mais projetos exigem uma versão> do SDK <da plataforma que não está instalada ou está incluída como parte de uma atualização futura para o Visual Studio."
- Primeiro, determine o número da versão do SDK para Windows 10 que você instalou. Navegue até C:\Arquivos de <Programas (x86)\Windows Kits\10\Include\<versionfoldername> e anote versionfoldername>, que estará em notação quádrupla, "Major.Minor.Build.Revision".
- Abra seu arquivo de projeto para editar e encontre os
TargetPlatformVersion
elementos eTargetPlatformMinVersion
. Edite-os para ficarem assim, substituindo <versionfoldername> pelo número de versão de notação quádrupla 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 na tabela destinam-se a fornecer informações suficientes para se desbloquear. Você encontrará mais detalhes sobre cada uma dessas questões ao ler os tópicos posteriores.
Sintoma | Medida |
---|---|
O analisador ou compilador XAML fornece o erro "O nome "<typename>" não existe no namespace [...]." | Se <typename> for um tipo personalizado, em suas declarações de prefixo de namespace na marcação XAML, altere "clr-namespace" para "using" e remova todos os tokens de assembly. Para tipos de plataforma, isso significa que o tipo não se aplica à Plataforma Universal do Windows (UWP), 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ê portar alguns nomes de tipo, como a página raiz. 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 [...].". | É provável que isso seja causado pelo tipo e não pela propriedade anexada; Nesse caso, você já terá um erro para o tipo e esse erro desaparecerá assim que você corrigir isso. Exemplos que você pode encontrar imediatamente são phone:PhoneApplicationPage.Resources e phone:PhoneApplicationPage.DataContext . |
O analisador ou compilador XAML, ou uma exceção de runtime, fornece o erro "O recurso "<resourcekey>" não pôde ser resolvido.". | A chave de 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 as teclas de estilo TextBlock do sistema, como PhoneTextNormalStyle . |
O compilador C# fornece o erro "O tipo ou nome do namespace '<name>' não pôde ser encontrado [...]" ou "O tipo ou nome do namespace '<name>' não existe no namespace [...]" ou "O tipo ou nome do namespace '<name>' não existe no contexto atual". | É provável que isso signifique que o compilador ainda não sabe o namespace UWP correto para um tipo. Use o comando Resolver do Visual Studio para corrigir isso. Se a API não estiver no conjunto de APIs conhecido como família de dispositivos universal (em outras palavras, a API é implementada em um SDK de extensão), use os SDKs de extensão. Pode haver outros casos em que a porta é menos direta. Exemplos que você pode encontrar imediatamente são DesignerProperties e BitmapImage . |
Quando executado no dispositivo, o aplicativo é encerrado ou, quando iniciado no Visual Studio, você vê o erro "Não é possível ativar o aplicativo Windows Runtime 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 pode ser o código imperativo em execução em suas próprias páginas ou em propriedades associadas (ou outros tipos) durante a inicialização. Ou pode estar acontecendo durante a análise do arquivo XAML prestes a ser exibido quando o aplicativo for encerrado (se for iniciado no Visual Studio, essa será a página de inicialização). Procure chaves de recurso inválidas e/ou tente algumas das diretrizes na seção Rastreando problemas neste tópico. |
WMC0055 de erro do XamlCompiler: não é possível atribuir o valor de texto '<sua geometria> de fluxo' à propriedade 'Clip' do tipo 'RectangleGeometry' | Na UWP, o tipo do aplicativo UWP C++ do Microsoft DirectX e XAML. |
WMC0001 de erro do XamlCompiler: Tipo desconhecido 'RadialGradientBrush' no namespace XML [...] | A UWP não tem o tipo RadialGradientBrush . Remova o RadialGradientBrush da marcação e use algum outro tipo de aplicativo UWP C++ do Microsoft DirectX e XAML. |
WMC0011 de erro do XamlCompiler: membro desconhecido 'OpacityMask' no elemento '<UIElement type>' | O aplicativo UWP Microsoft DirectX e XAML C++ UWP. |
Ocorreu uma exceção de primeira chance do tipo 'System.Runtime.InteropServices.COMException' 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 não está tendo efeito em sua propriedade de destino. | Torne a animação independente ou defina EnableDependentAnimation="True" sobre ela. Veja 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 uma versão> do SDK <da plataforma que não está instalada ou está incluída como parte de uma atualização futura para o 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 (pelo menos um dos quais é qualificado para MRT) compartilhando o mesmo arquivo xaml.cs e os elementos têm atributos x:Name que são inconsistentes entre os dois arquivos xaml. Tente adicionar o mesmo nome aos mesmos elementos em ambos os arquivos xaml ou omita nomes completamente. |
O próximo tópico é Portabilidade de XAML e interface do usuário.