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.

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:
- 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.
- 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.
- Abra um novo arquivo de projeto e altere o TargetFramework para net472 .
- 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.
- 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 .