Compartilhar via


Solução de problemas de portabilidade do Tempo de Execução do Windows 8.x 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 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 poderá ser o resultado de uma referência a um recurso ausente (ou seja, um recurso cuja chave existe para aplicativos Universal 8.1, mas não para aplicativos Windows 10, como algumas chaves de estilo TextBlock 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 e TargetPlatformMinVersion . 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
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.
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.
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 da Plataforma Universal do Windows (UWP) (esse é o caso de alguns recursos do Windows Phone, por exemplo). Encontre o recurso equivalente correto e atualize sua marcação. Exemplos que você pode encontrar imediatamente são chaves de sistema, como PhoneAccentBrush.
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 tipo é implementado em um SDK de extensão (embora possa haver casos em que a solução não seja tão simples). Use o conteúdo de referência das APIs do Windows para determinar qual SDK de extensão implementa a API e, em seguida, use o comando Adicionar>Referência do Visual Studio para adicionar uma referência a esse SDK ao seu projeto. Se o aplicativo for direcionado ao conjunto de APIs conhecido como família de dispositivos universal, é vital que você use a classe ApiInformation para testar em tempo de execução a presença do SDK de extensão antes de chamá-los (isso é chamado de código adaptável). Se existir uma API universal, isso é sempre preferível a uma API em um SDK de extensão. Para obter mais informações, consulte SDKs de extensão.

O próximo tópico é Portabilidade de XAML e interface do usuário.