Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esta é a primeira parte de um tutorial que demonstra como modernizar um aplicativo de área de trabalho WPF de exemplo chamado Contoso Expenses. Para obter uma visão geral do tutorial, pré-requisitos e instruções para baixar o aplicativo de exemplo, consulte Tutorial: Modernizar um aplicativo WPF.
Nesta parte do tutorial, você migrará todo o aplicativo Contoso Expenses do .NET Framework 4.7.2 para o .NET Core 3. Antes de iniciar esta parte do tutorial, verifique se você abrir e criar o de exemplo contosoExpenses no Visual Studio 2019.
Observação
Para obter mais informações sobre como migrar um aplicativo WPF do .NET Framework para o .NET Core 3, consulte esta série de blogs.
Migrar o projeto ContosoExpenses para o .NET Core 3
Nesta seção, você migrará o projeto ContosoExpenses no aplicativo Contoso Expenses para o .NET Core 3. Você fará isso criando um novo arquivo de projeto que contém os mesmos arquivos do projeto ContosoExpenses existente, mas tem como destino o .NET Core 3 em vez do .NET Framework 4.7.2. Isso permite que você mantenha uma única solução com as versões do .NET Framework e do .NET Core do aplicativo.
Verifique se o projeto ContosoExpenses atualmente tem como destino o .NET Framework 4.7.2. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto ContosoExpenses, escolha Propriedadese confirme se a propriedade Estrutura de Destino na guia Aplicativo está definida como o .NET Framework 4.7.2.
No Windows Explorer, navegue até a pasta C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses e crie um novo arquivo de texto chamado ContosoExpenses.Core.csproj.
Clique com o botão direito do mouse no arquivo, escolha Abrir com e abra-o em um editor de texto de sua escolha, como Bloco de Notas, Visual Studio Code ou Visual Studio.
Copie o texto a seguir para o arquivo e salve-o.
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <UseWPF>true</UseWPF> </PropertyGroup> </Project>Feche o arquivo e retorne à solução ContosoExpenses no Visual Studio.
Clique com o botão direito do mouse na solução ContosoExpenses e escolha Adicionar -> Projeto Existente. Selecione o arquivo ContosoExpenses.Core.csproj que você acabou de criar na
C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpensespasta para adicioná-lo à solução.
O ContosoExpenses.Core.csproj inclui os seguintes elementos:
- O elemento Project especifica uma versão do SDK do Microsoft.NET.Sdk.WindowsDesktop. Isso se refere a aplicativos .NET para Área de Trabalho do Windows e inclui componentes para aplicativos WPF e Windows Forms.
- O elemento PropertyGroup contém elementos filho que indicam que a saída do projeto é um executável (não uma DLL), tem como destino o .NET Core 3 e usa o WPF. Para um aplicativo do Windows Forms, você usaria um elemento UseWinForms em vez do elemento UseWPF .
Observação
Ao trabalhar com o formato .csproj introduzido com o .NET Core 3.0, todos os arquivos na mesma pasta que o .csproj são considerados parte do projeto. Portanto, você não precisa especificar todos os arquivos incluídos no projeto. Você deve especificar apenas os arquivos para os quais deseja definir uma ação de build personalizada ou que deseja excluir.
Migrar o projeto ContosoExpenses.Data para o .NET Standard
A solução ContosoExpenses inclui uma biblioteca de classes ContosoExpenses.Data, que contém modelos e interfaces para serviços, e destina-se ao .NET 4.7.2. Os aplicativos do .NET Core 3.0 podem usar bibliotecas do .NET Framework, desde que não usem APIs que não estejam disponíveis no .NET Core. No entanto, o melhor caminho de modernização é mover suas bibliotecas para o .NET Standard. Isso garantirá que sua biblioteca seja totalmente compatível com seu aplicativo .NET Core 3.0. Além disso, você pode reutilizar a biblioteca também com outras plataformas, como Web (por meio do ASP.NET Core).
Para migrar o projeto ContosoExpenses.Data para o .NET Standard:
No Visual Studio, clique com o botão direito do mouse no projeto ContosoExpenses.Data e escolha Descarregar Projeto. Clique com o botão direito do mouse no projeto novamente e escolha Editar ContosoExpenses.Data.csproj.
Exclua todo o conteúdo do arquivo de projeto.
Copie e cole o XML a seguir e salve o arquivo.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> </Project>Clique com o botão direito do mouse no projeto ContosoExpenses.Data e escolha Recarregar Projeto.
Configurar pacotes e dependências do NuGet
Quando você migrou os projetos ContosoExpenses.Core e ContosoExpenses.Data nas seções anteriores, você removeu as referências do pacote NuGet dos projetos. Nesta seção, você adicionará essas referências novamente.
Para configurar pacotes NuGet para o projeto ContosoExpenses.Data:
No projeto ContosoExpenses.Data, expanda o nó Dependências. Observe que a seção NuGet está ausente.
Se você abrir o Packages.config no Gerenciador de Soluções , encontrará as referências 'antigas' dos pacotes NuGet que usavam o projeto quando ele estava usando o .NET Framework completo.
Aqui está o conteúdo do arquivo Packages.config . Você observará que todos os Pacotes NuGet têm como destino o .NET Framework 4.7.2 completo:
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Bogus" version="26.0.2" targetFramework="net472" /> <package id="LiteDB" version="4.1.4" targetFramework="net472" /> </packages>No projeto ContosoExpenses.Data , exclua o arquivo Packages.config .
No projeto ContosoExpenses.Data, clique com o botão direito do mouse no nó Dependências e escolha Gerenciar Pacotes NuGet.
Na janela do Gerenciador de Pacotes do NuGet
, clique em Procurar . Pesquise oBoguspacote e instale a versão estável mais recente.
Pesquise o
LiteDBpacote e instale a versão estável mais recente.
Talvez você esteja se perguntando onde essas listas de pacotes NuGet são armazenados, já que o projeto não tem mais um arquivo packages.config. Os pacotes NuGet referenciados são armazenados diretamente no arquivo .csproj. Você pode verificar isso exibindo o conteúdo do arquivo de projeto ContosoExpenses.Data.csproj em um editor de texto. Você encontrará as seguintes linhas adicionadas no final do arquivo:
<ItemGroup> <PackageReference Include="Bogus" Version="26.0.2" /> <PackageReference Include="LiteDB" Version="4.1.4" /> </ItemGroup>Observação
Você também pode observar que está instalando os mesmos pacotes para este projeto do .NET Core 3 que os usados pelos projetos do .NET Framework 4.7.2. Os pacotes NuGet dão suporte a vários direcionamentos. Os autores da biblioteca podem incluir versões diferentes de uma biblioteca no mesmo pacote, compiladas para diferentes arquiteturas e plataformas. Esses pacotes dão suporte ao .NET Framework completo, bem como ao .NET Standard 2.0, que é compatível com projetos do .NET Core 3. Para obter mais informações sobre as diferenças .NET Framework, .NET Core e .NET Standard, consulte .NET Standard.
Para configurar pacotes NuGet para o projeto ContosoExpenses.Core:
No projeto
ContosoExpenses.Core, abra o arquivo packages.config . Observe que ele atualmente contém as referências a seguir direcionadas ao .NET Framework 4.7.2.<?xml version="1.0" encoding="utf-8"?> <packages> <package id="CommonServiceLocator" version="2.0.2" targetFramework="net472" /> <package id="MvvmLightLibs" version="5.4.1.1" targetFramework="net472" /> <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" /> <package id="Unity" version="5.10.2" targetFramework="net472" /> </packages>Nas etapas a seguir, você verá as versões do .NET Standard dos pacotes
MvvmLightLibseUnity. As outras duas são dependências baixadas automaticamente pelo NuGet quando você instala essas duas bibliotecas.No projeto ContosoExpenses.Core , exclua o arquivo Packages.config.
Clique com o botão direito do mouse no projeto ContosoExpenses.Core e escolha Gerenciar Pacotes NuGet.
Na janela do Gerenciador de Pacotes do NuGet
, clique em Procurar . Pesquise oUnitypacote e instale a versão estável mais recente.
Pesquise o
MvvmLightLibsStd10pacote e instale a versão estável mais recente. Esta é a versão do .NET Standard do pacoteMvvmLightLibs. Para esse pacote, o autor optou por empacotar a versão do .NET Standard da biblioteca em um pacote separado que a versão do .NET Framework.
No projeto ContosoExpenses.Core, clique com o botão direito do mouse no nó Dependencies e escolha Adicionar Referência.
Na categoria Projetos da Solução >, selecione ContosoExpenses.Data e clique em OK.
Desativar atributos de assembly gerados automaticamente
Neste ponto do processo de migração, se você tentar criar o projeto ContosoExpenses.Core , verá alguns erros.
Esse problema está acontecendo porque o novo formato .csproj introduzido com o .NET Core 3.0 armazena as informações do assembly no arquivo de projeto em vez do arquivo AssemblyInfo.cs . Para corrigir esses erros, desabilite esse comportamento e permita que o projeto continue a usar o arquivo AssemblyInfo.cs .
No Visual Studio, clique com o botão direito do mouse no ContosoExpenses.Core projeto e escolha Descarregar Projeto. Clique com o botão direito do mouse no projeto novamente e escolha Editar ContosoExpenses.Core.csproj.
Adicione o seguinte elemento na seção PropertyGroup e salve o arquivo.
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>Depois de adicionar esse elemento, a seção PropertyGroup agora deve ter esta aparência:
<PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup>Clique com o botão direito do mouse no projeto ContosoExpenses.Core e escolha Recarregar o Projeto.
Clique com o botão direito do mouse no projeto ContosoExpenses.Data e escolha Descarregar Projeto. Clique com o botão direito do mouse no projeto novamente e escolha Editar ContosoExpenses.Data.csproj.
Adicione a mesma entrada na seção PropertyGroup e salve o arquivo.
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>Depois de adicionar esse elemento, a seção PropertyGroup agora deve ter esta aparência:
<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup>Clique com o botão direito do mouse no projeto ContosoExpenses.Data e escolha Recarregar Projeto.
Adicionar o Pacote de Compatibilidade do Windows
Se agora você tentar compilar os projetos ContosoExpenses.Core e ContosoExpenses.Data , verá que os erros anteriores foram corrigidos, mas ainda há alguns erros na biblioteca ContosoExpenses.Data semelhantes a esses.
Services\RegistryService.cs(9,26,9,34): error CS0103: The name 'Registry' does not exist in the current context
Services\RegistryService.cs(12,26,12,34): error CS0103: The name 'Registry' does not exist in the current context
Services\RegistryService.cs(12,97,12,123): error CS0103: The name 'RegistryKeyPermissionCheck' does not exist in the current context
Esses erros são resultado da conversão do projeto ContosoExpenses.Data de uma biblioteca do .NET Framework (que é específica para Windows) em uma biblioteca .NET Standard, que pode ser executada em várias plataformas, incluindo Linux, Android, iOS e muito mais. O projeto ContosoExpenses.Data contém uma classe chamada RegistryService, que interage com o registro, um conceito somente do Windows.
Para resolver esses erros, instale o pacote NuGet de compatibilidade do Windows. Esse pacote fornece suporte para muitas APIs específicas do Windows a serem usadas em uma biblioteca do .NET Standard. A biblioteca não será mais multiplataforma depois de usar esse pacote, mas ainda terá como destino o .NET Standard.
Clique com o botão direito do mouse no projeto ContosoExpenses.Data .
Escolha Gerenciar pacotes NuGet.
Na janela do Gerenciador de Pacotes do NuGet
, clique em Procurar . Pesquise oMicrosoft.Windows.Compatibilitypacote e instale a versão estável mais recente.
Agora tente novamente compilar o projeto clicando com o botão direito do mouse no projeto ContosoExpenses.Data e escolhendo Compilar.
Desta vez, o processo de build será concluído sem erros.
Testar e depurar a migração
Agora que os projetos estão sendo compilados com êxito, você está pronto para executar e testar o aplicativo para ver se há erros de runtime.
Clique com o botão direito do mouse no projeto ContosoExpenses.Core e escolha Definir como Projeto de Inicialização.
Pressione F5 para iniciar o projeto ContosoExpenses.Core no depurador. Você verá uma exceção semelhante à seguinte.
Essa exceção está sendo gerada porque quando você excluiu o conteúdo do arquivo .csproj no início da migração, você removeu as informações sobre a ação Build para os arquivos de imagem. As seguintes etapas corrigem esse problema.
Pare o depurador.
Clique com o botão direito do mouse no projeto ContosoExpenses.Core e escolha Descarregar Projeto. Clique com o botão direito do mouse no projeto novamente e escolha Editar ContosoExpenses.Core.csproj.
Antes do elemento Project de fechamento, adicione a seguinte entrada:
<ItemGroup> <Content Include="Images/*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>Clique com o botão direito do mouse no projeto ContosoExpenses.Core e escolha Recarregar o Projeto.
Para atribuir o Contoso.ico ao app, clique com o botão direito do mouse no projeto ContosoExpenses.Core e escolha Propriedades. Na página aberta, clique na lista suspensa em Ícone e selecione
Images\contoso.ico.
Clique em Salvar.
Pressione F5 para iniciar o projeto ContosoExpenses.Core no depurador. Confirme se o aplicativo agora está em execução.
Próximas etapas
Neste ponto do tutorial, você migrou com êxito o aplicativo Contoso Expenses para o .NET Core 3. Agora você está pronto para Parte 2: adicionar um controle InkCanvas UWP usando ilhas XAML.
Observação
Se você tiver uma tela de alta resolução, poderá observar que o aplicativo parece muito pequeno. Você resolverá esse problema na próxima etapa do tutorial.
Windows developer