Configurar projetos do Windows

Adicionando novos projetos do Windows a uma solução existente Xamarin.Forms

Soluções mais antigas Xamarin.Forms (ou aquelas criadas no macOS) não terão projetos de aplicativo de Plataforma Universal do Windows (UWP). Portanto, você precisará adicionar manualmente um projeto UWP para criar um aplicativo UWP (Windows 10).

Adicionar um aplicativo Plataforma Universal do Windows

O Visual Studio 2019 no Windows 10 é recomendado para criar aplicativos UWP. Para obter mais informações sobre o Plataforma Universal do Windows, consulte Introdução ao Plataforma Universal do Windows.

A UWP está disponível na Xamarin.Forms versão 2.1 e posterior, e Xamarin.Forms. Há suporte para mapas na Xamarin.Forms versão 2.2 e posterior.

Verifique a seção de solução de problemas para obter dicas úteis.

Siga estas instruções para adicionar um aplicativo UWP que será executado em telefones, tablets e desktops do Windows 10:

1 . Clique com o botão direito do mouse na solução e selecione Adicionar > Novo Projeto... e adicione um projeto aplicativo em branco (Universal do Windows):

Diálogo Adicionar Novo Projeto

2 . Na caixa de diálogo Novo projeto Plataforma Universal do Windows, selecione as versões mínima e de destino do Windows 10 em que o aplicativo será executado:

Caixa de diálogo Novo Projeto Plataforma Universal do Windows

3 . Clique com o botão direito do mouse no projeto UWP e selecione Gerenciar Pacotes NuGet... e adicione o Xamarin.Forms pacote. Verifique se os outros projetos na solução também são atualizados para a mesma versão do Xamarin.Forms pacote.

4 . Verifique se o novo projeto UWP será criado na janela Compilar > Configuration Manager (isso provavelmente não terá acontecido por padrão). Marque as caixas Compilar e Implantar para o projeto Universal:

Configuration Manager

5. Clique com o botão direito do mouse no projeto e selecione Adicionar > Referência e crie uma referência ao projeto de Xamarin.Forms aplicativo (.NET Standard ou Projeto Compartilhado).

Caixa de diálogo Gerenciador de Referências

6 . No projeto UWP, edite App.xaml.cs para incluir a Init chamada de método dentro do método em torno da OnLaunched linha 52:

// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter

7 . No projeto UWP, edite MainPage.xaml removendo o Grid contido no Page elemento .

8 . Em MainPage.xaml, adicione uma nova xmlns entrada para Xamarin.Forms.Platform.UWP:

xmlns:forms="using:Xamarin.Forms.Platform.UWP"

9 . Em MainPage.xaml, altere o elemento raiz <Page para <forms:WindowsPage:

<forms:WindowsPage
...
   xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>

10 . No projeto UWP, edite MainPage.xaml.cs para remover o : Page especificador de herança para o nome da classe (já que ele agora herdará devido WindowsPage à alteração feita na etapa anterior):

public sealed partial class MainPage  // REMOVE ": Page"

11 . Em MainPage.xaml.cs, adicione a LoadApplication chamada no MainPage construtor para iniciar o Xamarin.Forms aplicativo:

// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());

Observação

O argumento para o LoadApplication método é a Xamarin.Forms.Application instância definida em seu projeto .NET Standard.

12 . Adicione todos os recursos locais (por exemplo, arquivos de imagem) dos projetos de plataforma existentes que são necessários.

Solução de problemas

"Exceção de invocação de destino" ao usar "Compilar com .NET Native cadeia de ferramentas"

Se o aplicativo UWP estiver fazendo referência a vários assemblies (por exemplo, bibliotecas de controle de terceiros ou seu próprio aplicativo for dividido em várias bibliotecas), Xamarin.Forms talvez não seja possível carregar objetos desses assemblies (como renderizadores personalizados).

Isso pode ocorrer ao usar a cadeia de ferramentas Compilar com .NET Native, que é uma opção para aplicativos UWP na janela Propriedades > Compilar > Geral para o projeto.

Você pode corrigir isso usando uma sobrecarga específica da UWP da Forms.Init chamada em App.xaml.cs , conforme mostrado no código abaixo (você deve substituir ClassInOtherAssembly por uma classe real que seu código referencia):

// You'll need to add `using System.Reflection;`
List<Assembly> assembliesToInclude = new List<Assembly>();

// Now, add in all the assemblies your app uses
assembliesToInclude.Add(typeof (ClassInOtherAssembly).GetTypeInfo().Assembly);

// Also do this for all your other 3rd party libraries
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
// replaces Xamarin.Forms.Forms.Init(e);

Adicione uma entrada para cada assembly que você adicionou como referência no Gerenciador de Soluções, seja por meio de uma referência direta ou de um NuGet.

Serviços de Dependência e compilação de .NET Native

Os builds de versão usando .NET Native compilação podem falhar ao resolve serviços de dependência definidos fora do executável do aplicativo main (como em um projeto ou biblioteca separado).

Use o DependencyService.Register<T>() método para registrar manualmente as classes de serviço de dependência. Com base no exemplo acima, adicione o método register desta forma:

Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this