Portando aplicativos da ĂĄrea de trabalho para o .NET Core

Desde que comecei a trabalhar com a comunidade para portar aplicativos de desktop do .NET Framework para o .NET Core, notei que existem "dois campos": os representantes de um desejam uma lista muito simples e curta de instruçÔes para portar seus aplicativos para o .NET Core , enquanto representantes de outra pessoa preferem uma abordagem mais baseada em princípios com muitas informaçÔes iniciais. Em vez de escrever um documento como o "canivete suíço", publicaremos duas postagens no blog, uma para cada "acampamento":

  • Este post Ă© um caso simples . Ele se concentra em instruçÔes simples e em pequenos aplicativos e considera a maneira mais fĂĄcil de portar um aplicativo para o .NET Core.
  • Posteriormente publicaremos outro post para casos mais complexos . Ele se concentrarĂĄ em aplicativos nĂŁo triviais, como um aplicativo WPF com dependĂȘncias no WCF e em pacotes de UI de terceiros.

Se vocĂȘ preferir assistir a um vĂ­deo, em vez de ler, aqui estĂĄ um vĂ­deo em que eu faço tudo descrito abaixo.


Etapa 0 - Pré-requisitos


Para transferir aplicativos da ĂĄrea de trabalho para o Core, vocĂȘ precisarĂĄ do .NET Core 3 e do Visual Studio 2019.

Etapa 1 - Inicie o Portability Analyzer


Antes de portar, verifique se o aplicativo Ă© compatĂ­vel com o .NET Core. Para fazer isso, baixe e execute o .NET Portability Analyzer .

  • Na primeira guia, Resumo da portabilidade, se todos os valores na coluna .NET Core forem 100% (tudo estiver destacado em verde), seu cĂłdigo serĂĄ totalmente compatĂ­vel e vocĂȘ poderĂĄ ir para a Etapa 2.
  • Se vocĂȘ tiver valores inferiores a 100%, verifique primeiro todos os conjuntos que nĂŁo fazem parte do seu aplicativo. Para eles, Ă© necessĂĄrio verificar se os autores fornecem versĂ”es para o .NET Core ou .NET Standard.
  • Agora observe a outra parte dos assemblies que vem do seu cĂłdigo. Se nenhum assembly for especificado no RelatĂłrio de Portabilidade, vĂĄ para a Etapa 2. Depois de fazer isso, abra a guia Detalhes, filtre a tabela clicando na coluna Montagem e concentre-se apenas nos relacionados ao seu aplicativo. Navegue pela lista e refatoração de cĂłdigo para parar de usar a API ou substitua-a usando alternativas da API com .NET Core.

imagem

Etapa 2 - Migrando .csproj para o estilo SDK


No Gerenciador de SoluçÔes, clique com o botĂŁo direito do mouse no seu projeto (nĂŁo Ă© uma solução!). VocĂȘ vĂȘ Editar arquivo de projeto ? Nesse caso, vocĂȘ jĂĄ estĂĄ usando o arquivo de projeto no estilo SDK, entĂŁo vocĂȘ deve ir para a Etapa 3 . Caso contrĂĄrio, faça o seguinte:

  • Faça check-in no Solution Explorer se o projeto contiver o arquivo packages.config . Caso contrĂĄrio, nenhuma ação serĂĄ necessĂĄria, mas se for, clique com o botĂŁo direito do mouse em packages.config e selecione Migrate packages.config para PackageReference . Depois clique em OK .
  • Abra o arquivo do projeto clicando com o botĂŁo direito do mouse no projeto e selecionando Descarregar Projeto . Em seguida, clique com o botĂŁo direito do mouse no projeto e selecione Editar <nome do seu projeto> .csproj .
  • Copie o conteĂșdo do arquivo do projeto em algum lugar, por exemplo, no Bloco de Notas, para que vocĂȘ possa pesquisĂĄ-lo posteriormente.
  • Exclua tudo do arquivo de projeto aberto no Visual Studio (sei que isso parece agressivo, mas adicionaremos apenas o conteĂșdo necessĂĄrio da cĂłpia que fizemos em algumas etapas). Em vez de apenas o texto excluĂ­do, cole o cĂłdigo a seguir.

    Para um aplicativo no WinForms:

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project> 

    Para um aplicativo WPF:

     <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project> 
  • Encontre PackageReference do bloco de notas. Se vocĂȘ nĂŁo encontrou nada, siga em frente. Se vocĂȘ encontrar um PackageReference , copie o ItemGroup inteiro que contĂ©m o PackageReference no arquivo de projeto aberto no Visual Studio, diretamente abaixo das linhas inseridas na etapa acima. Faça isso para cada elemento PackageReference que vocĂȘ encontrou. O bloco copiado deve ficar assim:

     <ItemGroup> <PackageReference Include="NUnit"> <Version>3.11.0</Version> </PackageReference> </ItemGroup> 
  • Agora faça o mesmo acima para ProjectReference . Se vocĂȘ nĂŁo encontrou nada, siga em frente. Se vocĂȘ encontrar algum elemento ProjectReference , eles terĂŁo a seguinte aparĂȘncia:

     <ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj"> <Project>{7bce0d50-17fe-4fda-b6b7-e7960aed8ac2}</Project> <Name>WindowsFormsApp1</Name> </ProjectReference> </ItemGroup> 
  • VocĂȘ pode excluir linhas com as propriedades Projeto e Nome , pois elas nĂŁo sĂŁo necessĂĄrias no novo estilo do arquivo do projeto. Portanto, para cada ProjectReference que vocĂȘ encontrou (se houver), copie apenas o ItemGroup e o ProjectReference .

     <ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj" /> </ItemGroup> 
  • Guarde tudo. Feche o arquivo .csproj no Visual Studio. Clique com o botĂŁo direito do mouse no seu projeto no Solution Explorer e selecione Recarregar Projeto . Reconstrua e verifique se nĂŁo hĂĄ erros.

Boas notĂ­cias, vocĂȘ acabou de atualizar seu arquivo de projeto para um novo estilo de SDK! O projeto ainda estĂĄ direcionado para o .NET Framework, mas agora vocĂȘ pode reconfigurĂĄ-lo para o .NET Core.

Etapa 3 - Redirecionar no .NET Core


Abra o arquivo do projeto clicando duas vezes no Solution Explorer . Localize a propriedade TargetFramework e altere o valor para netcoreapp3.0 . O arquivo do seu projeto deve ficar assim:

 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> ... </PropertyGroup> ... </Project> 

Crie e execute seu projeto. ParabĂ©ns, vocĂȘ migrou para o .NET Core 3!

Bug fix


Se vocĂȘ encontrar erros como

 The type or namespace <some name> could not be found 

ou

 The name <some name> does not exist in the current context 

e se o seu relatĂłrio de portabilidade for exibido em verde, vocĂȘ deve saber que eles sĂŁo fĂĄceis de corrigir, simplesmente adicionando o pacote NuGet Ă  biblioteca apropriada. Se vocĂȘ nĂŁo conseguir encontrar o pacote NuGet com a biblioteca ausente, tente entrar em contato com Microsoft.Windows.Compatibility . Este pacote adiciona ~ 21K .NET API do .NET Framework.

Trabalhar com designers


Embora a interface do usuĂĄrio do aplicativo possa ser editada usando cĂłdigo, os desenvolvedores geralmente preferem usar construtores visuais. Com o .NET Core, tivemos que mudar a arquitetura do trabalho dos designers com os projetos do .NET Core:

  • O WPF Designer jĂĄ estĂĄ no modo de visualização e estamos trabalhando para adicionar recursos adicionais a ele.
  • O WinForms Designer para .NET Core estarĂĄ disponĂ­vel mais tarde; portanto, por enquanto, vocĂȘ pode usar o WinForms Designer para .NET Framework como solução alternativa.

Veja como usar o construtor WinForms para o .NET Framework:

  1. Copie o arquivo .csproj (por exemplo, MyProject.csproj ), atribua um nome diferente, por exemplo, MyProject.NetFramework.csproj e coloque-o ao lado do arquivo de projeto existente.
  2. Verifique se o seu projeto estĂĄ fechado no Visual Studio, abra um novo projeto MyProject.NetFramework.csproj .
    No Gerenciador de SoluçÔes, clique com o botĂŁo direito do mouse no seu projeto e selecione Propriedades . Na guia Aplicativo (deve abrir por padrĂŁo), defina o nome do Assembly e o namespace padrĂŁo com os mesmos valores do projeto original (remova “.NetFramework” dos nomes).
    Salve esta solução ao lado da sua solução existente.
  3. Abra um novo arquivo de projeto e altere o TargetFramework para net472 .
  4. Agora que vocĂȘ precisa usar o construtor WinForms, carregue seu projeto em MyProject.NetFramework.csproj e poderĂĄ começar a trabalhar com o construtor .NET Framework. Quando terminar, feche e abra seu projeto com o arquivo de projeto do .NET Core.
  5. Esta é apenas uma solução alternativa até que o construtor WinForms para .NET Core esteja pronto.

Por que mudar para o .NET Core?


Assista a um vídeo em que Scott Hunter e eu conversamos sobre todas as atualizaçÔes mais recentes do .NET Core 3. Migrando para o .NET Core 3.0 .

Source: https://habr.com/ru/post/pt454508/


All Articles