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

Desde que eu tenho trabalhado com a comunidade na portabilidade de aplicativos de desktop do .NET Framework para o .NET Core, notei que existem dois grupos de pessoas: alguns desejam uma lista muito simples e curta de instruçÔes para que seus aplicativos sejam portados. O .NET Core, enquanto outros preferem uma abordagem mais baseada em princípios, com mais informaçÔes båsicas. Em vez de escrever um documento "Canivete suíço", publicaremos duas postagens no blog, uma para cada campo:


  • Este post Ă© um caso simples . Ele Ă© focado em instruçÔes simples e aplicativos menores e Ă© a maneira mais fĂĄcil de mover seu aplicativo para o .NET Core.
  • Publicaremos outro post para casos mais complicados . Esta postagem se concentrarĂĄ mais em aplicativos nĂŁo triviais, como o aplicativo WPF com dependĂȘncias no WCF e nos pacotes de UI de terceiros.

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



Etapa 0 - Pré-requisitos


Para portar seus aplicativos de desktop para o Core, vocĂȘ precisarĂĄ do .NET Core 3 e do Visual Studio 2019.


Etapa 1 - Execute o analisador de portabilidade


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 vocĂȘ possui apenas 100% na coluna .NET Core (tudo estĂĄ destacado em verde), seu cĂłdigo Ă© totalmente compatĂ­vel, vĂĄ para a Etapa 2.
  • Se vocĂȘ tiver valores inferiores a 100%, verifique primeiro todos os assemblies que nĂŁo fazem parte do seu aplicativo. Para esses, verifique se os autores estĂŁo fornecendo versĂ”es para o .NET Core ou .NET Standard.
  • Agora observe a outra parte dos assemblies provenientes do seu cĂłdigo. Se vocĂȘ nĂŁo possui nenhum dos seus assemblies listados no relatĂłrio de portabilidade, vĂĄ para a Etapa 2. Se tiver, abra a guia Detalhes, filtre a tabela clicando na coluna Montagem e concentre-se apenas nos que sĂŁo do seu aplicativo. Percorra a lista e refatorar seu cĂłdigo para parar de usar a API ou substituir o uso da API por alternativas do .NET Core.


Etapa 2 - Migrar para .csproj no estilo SDK


No Gerenciador de SoluçÔes , clique com o botĂŁo direito do mouse no seu projeto (nĂŁo na solução!). VocĂȘ vĂȘ Editar arquivo de projeto ? Se fizer isso, vocĂȘ jĂĄ usa o arquivo de projeto no estilo SDK, portanto, vocĂȘ deve passar para a Etapa 3 . Caso contrĂĄrio, faça o seguinte.


  • Verifique no Solution Explorer se o seu projeto contĂ©m um arquivo packages.config . Caso contrĂĄrio, nenhuma ação serĂĄ necessĂĄria; se o fizer, clique com o botĂŁo direito do mouse em packages.config e escolha Migrar packages.config para PackageReference . Depois clique em OK .
  • Abra o arquivo do projeto clicando com o botĂŁo direito do mouse no projeto e escolha Descarregar Projeto . Em seguida, clique com o botĂŁo direito do mouse no projeto e escolha 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 pesquisar mais tarde.
  • Exclua tudo do seu arquivo de projeto aberto no Visual Studio (eu sei que parece agressivo, mas adicionaremos apenas o conteĂșdo necessĂĄrio da cĂłpia que acabamos de fazer em algumas etapas). Em vez do texto que vocĂȘ acabou de excluir, cole o cĂłdigo a seguir.Para um aplicativo 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> 
  • No bloco de notas, procure PackageReference . Se vocĂȘ nĂŁo encontrou nada, siga em frente. Se vocĂȘ encontrou PackageReference , copie todo o <ItemGroup> que contĂ©m PackageReference no seu arquivo de projeto, aberto no Visual Studio, logo abaixo das linhas que vocĂȘ colou na etapa acima. Faça isso para cada ocorrĂȘncia do PackageReference 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ĂȘ encontrou algum item do ProjectReference , eles se pareceriam com isso.

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

     <ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj" /> </ItemGroup> 

    Salve 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 o novo estilo SDK! O projeto ainda estĂĄ direcionado ao .NET Framework, mas agora vocĂȘ poderĂĄ redirecionĂĄ-lo para o .NET Core.


    Etapa 3 - redirecionar para o .NET Core


    Abra o arquivo do seu projeto clicando duas vezes no seu projeto no Solution Explorer . Localize a propriedade <TargetFramework> e altere o valor para netcoreapp3.0 . Agora o seu arquivo de 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ĂȘ portou para o .NET Core 3!


    Corrigindo erros


    Se vocĂȘ receber 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 seu relatĂłrio de portabilidade estiver verde, serĂĄ fĂĄcil corrigi-lo adicionando um pacote NuGet Ă  biblioteca correspondente. Se vocĂȘ nĂŁo conseguir encontrar o pacote NuGet com a biblioteca que estĂĄ faltando, tente fazer referĂȘncia a Microsoft.Windows.Compatibility . Este pacote adiciona ~ 21K APIs .NET do .NET Framework.


    Trabalhando com designers


    Embora seja possĂ­vel editar a interface do usuĂĄrio do seu aplicativo via cĂłdigo, os desenvolvedores geralmente preferem usar os designers visuais. Com o .NET Core, tivemos que re-projetar a maneira como os designers trabalham com projetos do .NET Core:


    • O designer do WPF jĂĄ estĂĄ em visualização e estamos trabalhando para adicionar mais funcionalidades a ele.
    • O designer do WinForms para .NET Core estarĂĄ disponĂ­vel posteriormente e, enquanto isso, vocĂȘ poderĂĄ usar o designer do .NET Framework WinForms como uma solução alternativa.

    Aqui estĂĄ como vocĂȘ pode usar o designer do .NET Framework WinForms:


    1. Copie o arquivo .csproj (digamos que vocĂȘ tenha o 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 o novo projeto MyProject.NetFramework.csproj .
      No Gerenciador de SoluçÔes , clique com o botĂŁo direito do mouse em seu projeto e selecione Propriedades . Na guia Aplicativo (deve estar aberto por padrĂŁo), defina o nome do Assembly e o namespace padrĂŁo com os mesmos valores do seu projeto inicial (remova “.NetFramework” dos nomes).
      Salve esta solução ao lado da sua solução existente.
    3. Abra o novo arquivo de projeto e altere o <TargetFramework> para net472 .
    4. Agora, quando vocĂȘ precisar usar o designer WinForms, carregue seu projeto com o arquivo de projeto MyProject.NetFramework.csproj e obterĂĄ a experiĂȘncia completa do designer do .NET Framework. Quando terminar o designer, feche e abra seu projeto com o arquivo de projeto do .NET Core.
    5. Esta é apenas uma solução alternativa até que o designer do WinForms para .NET Core esteja pronto.

    Por que porta para o .NET Core


    Confira o vĂ­deo em que Scott Hunter e eu estamos conversando sobre todas as novidades que vĂȘm com o .NET Core 3 Porting para o .NET Core 3.0 .

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


All Articles