Visão geral da porting de .NET Framework para .NET
Este artigo fornece uma visão geral do que deve considerar ao passar o seu código de .NET Framework para .NET (anteriormente denominado .NET Core). A ingrção para .NET de .NET Framework para muitos projetos é relativamente simples. A complexidade dos seus projetos dita o trabalho que vai fazer após a migração inicial dos ficheiros do projeto.
Os projetos em que o modelo de aplicações está disponível em .NET (como bibliotecas, aplicações para consolas e aplicações de desktop) geralmente requerem pouca mudança. Os projetos que exigem uma nova aplicação modelo, como a mudança para ASP.NET Core de ASP.NET, exigem mais trabalho. Muitos padrões da antiga aplicação modelo têm equivalentes que podem ser usados durante a conversão.
Windows tecnologias de ambiente de trabalho
Muitas aplicações criadas para .NET Framework usar uma tecnologia de ambiente de trabalho como Windows Forms ou Windows Presentation Foundation (WPF). Tanto Windows Forms como wpf foram portadores de .NET, mas estas continuam a ser tecnologias apenas Windows.
Considere as seguintes dependências antes de migrar uma aplicação Windows Forms ou WPF:
- Project ficheiros para .NET utilizem um formato diferente do .NET Framework.
- O seu projeto poderá utilizar uma API que não esteja disponível em .NET.
- Os controlos e bibliotecas de terceiros podem não ter sido portados para .NET e permanecer apenas disponíveis para .NET Framework.
- O seu projeto utiliza uma tecnologia que já não está disponível em .NET.
.NET utiliza as versões de código aberto de Windows Forms e WPF e inclui melhorias ao longo de .NET Framework.
Para tutoriais sobre a migração da sua aplicação para .NET 6, consulte um dos seguintes artigos:
- Migrar .NET Framework aplicativos WPF para .NET
- Migrar aplicativos .NET Framework Windows Forms para .NET
APIs específicos Windows
As aplicações ainda podem P/Invocar bibliotecas nativas em plataformas suportadas por .NET. Esta tecnologia não se limita a Windows. No entanto, se a biblioteca a que se refere for Windows específica, como uma user32.dll ou kernel32.dll, então o código só funciona em Windows. Para cada plataforma que pretende que a sua aplicação seja executada, terá de encontrar versões específicas da plataforma ou tornar o seu código genérico o suficiente para ser executado em todas as plataformas.
Ao apresentar uma aplicação de .NET Framework a .NET, a sua aplicação provavelmente utilizou uma biblioteca fornecida com o .NET Framework. Muitas APIs que estavam disponíveis em .NET Framework não foram portadoras de .NET porque dependiam de tecnologia Windows específica, como o Registo Windows ou o GDI+ desenho modelo.
O pacote de compatibilidade Windows fornece uma grande parte da superfície API .NET Framework para .NET e é fornecido através do Microsoft.Windows. Pacote NuGet de compatibilidade.
Para obter mais informações, consulte utilize o Pacote de Compatibilidade Windows para código de porta para .NET.
.NET Framework modo de compatibilidade
O modo de compatibilidade .NET Framework foi introduzido em .NET Standard 2.0. Este modo de compatibilidade permite que os projetos .NET Standard e .NET 5+ (e .NET Core 3.1) se refiram a bibliotecas .NET Framework apenas Windows. Fazer referência a bibliotecas .NET Framework não funciona para todos os projetos, como se a biblioteca usa APIs Windows Presentation Foundation (WPF), mas desbloqueia muitos cenários de porção. Para obter mais informações, consulte a Análise das suas dependências para código portuário de .NET Framework para .NET.
Tecnologias indisponíveis
Existem algumas tecnologias em .NET Framework que não existem em .NET:
-
A criação de domínios de aplicação adicionais não é suportada. Para isolamento de códigos, utilize processos ou recipientes separados como alternativa.
-
O remoting é utilizado para comunicar através dos domínios da aplicação, que já não são suportados. Para uma simples comunicação entre processos, considere os mecanismos de comunicação inter-processa (IPC) como uma alternativa à remoting, como a System.IO.Pipes classe ou a MemoryMappedFile classe. Para cenários mais complexos, considere quadros como o StreamJsonRpc ou ASP.NET Core (utilizando serviços gRPC ou RESTful Web API).
Segurança de acesso a código (CAS)
O CAS foi uma técnica de sandboxing suportada por .NET Framework mas depreciada em .NET Framework 4.0. Foi substituído pela Transparência de Segurança e não é suportado em .NET. Em vez disso, utilize limites de segurança fornecidos pelo sistema operativo, tais como virtualização, contentores ou contas de utilizador.
-
Semelhante ao CAS, esta técnica de sandboxing já não é recomendada para aplicações .NET Framework e não é suportada em .NET. Em vez disso, utilize limites de segurança fornecidos pelo sistema operativo, tais como virtualização, contentores ou contas de utilizador.
-
System.EnterpriseServices (COM+) não é suportado em .NET.
Windows Workflow Foundation (WF)
O WF não é suportado em .NET 5+ (incluindo .NET Core). Para uma alternativa, consulte o CoreWF.
Para obter mais informações sobre estas tecnologias não suportadas, consulte .NET Framework tecnologias indisponíveis em .NET Core e .NET 5+.
Plataforma transversal
.NET (anteriormente conhecido como .NET Core) foi concebido para ser cross-platform. Se o seu código não depender de tecnologias específicas Windows, pode funcionar em outras plataformas como macOS, Linux e Android. Isto inclui tipos de projetos como:
- Bibliotecas
- Ferramentas baseadas em consolas
- Automatização
- ASP.NET sites
.NET Framework é um componente só de Windows. Quando o seu código utiliza tecnologias específicas Windows ou APIs, como Windows Forms e Windows Presentation Foundation (WPF), o código ainda pode ser executado em .NET, mas não será executado em outros sistemas operativos.
É possível que a sua biblioteca ou aplicação baseada em consolas possa ser usada através de plataformas cruzadas sem alterar muito. Ao passar para .NET, poderá querer ter isso em consideração e testar a sua aplicação noutras plataformas.
O futuro da Norma .NET
.NET Standard é uma especificação formal de .NET APIs que estão disponíveis em múltiplas implementações .NET. A motivação por trás da Norma .NET foi estabelecer uma maior uniformidade no ecossistema .NET. A partir de .NET 5, foi adotada uma abordagem diferente para estabelecer a uniformidade, e esta nova abordagem elimina a necessidade de .NET Standard em muitos cenários. Para mais informações, consulte .NET 5 e .NET Standard.
.NET Standard 2.0 foi a última versão a suportar .NET Framework.
Ferramentas para ajudar a poraragem
Em vez de desembrulhá-lo manualmente de uma aplicação de .NET Framework para .NET, pode utilizar diferentes ferramentas para ajudar a automatizar alguns aspetos da migração. Por ter um projeto complexo é, por si só, um processo complexo. Estas ferramentas podem ajudar nessa viagem.
Mesmo que utilize uma ferramenta para ajudar a apresentar a sua aplicação, deve rever as Considerações ao apresentar a secção neste artigo.
.NET Upgrade Assistant
O .NET Upgrade Assistant é uma ferramenta de linha de comando que pode ser executada em diferentes tipos de aplicações .NET Framework. É projetado para ajudar na atualização de .NET Framework aplicações para .NET 5. Depois de executar a ferramenta, na maioria dos casos a aplicação exigirá mais esforço para completar a migração. A ferramenta inclui a instalação de analisadores que podem ajudar na conclusão da migração. Esta ferramenta funciona nos seguintes tipos de aplicações .NET Framework:
- Windows Forms
- WPF
- ASP.NET MVC
- Consola
- Bibliotecas de classes
Esta ferramenta utiliza as outras ferramentas listadas neste artigo e orienta o processo de migração. Para obter mais informações sobre a ferramenta, consulte a visão geral do Assistente de Atualização .NET.
tentar converter
A ferramenta try-convert é uma ferramenta global .NET que pode converter um projeto ou solução inteira para o .NET SDK, incluindo aplicações de ambiente de trabalho em movimento para .NET 5. No entanto, esta ferramenta não é recomendada se o seu projeto tiver um processo de construção complicado, como tarefas personalizadas, alvos ou importações.
Para mais informações, consulte o repositório de GitHub de tentativa.
.NET Analisador de Portabilidade
O .NET Portability Analyzer é uma ferramenta que analisa os conjuntos e fornece um relatório detalhado sobre .NET APIs que faltam para as aplicações ou bibliotecas serem portáteis nas plataformas específicas .NET.
Para utilizar o Analisador de Portabilidade .NET em Visual Studio, instale a extensão a partir do mercado.
Para obter mais informações, consulte o Analisador de Portabilidade .NET.
Analisador de compatibilidade da plataforma
O analisador de compatibilidade da Plataforma analisa se está ou não a usar uma API que irá lançar um PlatformNotSupportedException tempo de execução. Embora isto não seja comum se estiver a passar de .NET Framework 4.7.2 ou superior, é bom verificar. Para obter mais informações sobre APIs que lançam exceções em .NET, consulte APIs que sempre lançam exceções em .NET Core.
Para mais informações, consulte o analisador de compatibilidade da Plataforma.
Considerações ao porting
Ao apresentar a sua candidatura a .NET, considere as seguintes sugestões em ordem.
✔️ CONSIDERE utilizar o Assistente de Atualização .NET para migrar os seus projetos. Apesar de esta ferramenta estar em pré-visualização, automatiza a maioria dos passos manuais detalhados neste artigo e dá-lhe um ótimo ponto de partida para continuar o seu caminho de migração.
✔️ Considere examinar as suas dependências primeiro. As suas dependências devem ter como alvo .NET 5, .NET Standard ou .NET Core.
✔️ DO migrar de um ficheiro de packages.config NuGet para PackageReference as definições no ficheiro do projeto. Utilize Visual Studio para converter o package.config ficheiro.
✔️ CONSIDERE atualizar para o mais recente formato de ficheiros do projeto mesmo que ainda não consiga apresentar a sua aplicação. .NET Framework projetos usam um formato de projeto desatualizado. Embora o mais recente formato de projeto, conhecido como projetos ao estilo SDK, tenha sido criado para .NET Core e não só, eles trabalham com .NET Framework. Ter o seu ficheiro de projeto no formato mais recente dá-lhe uma boa base para a sua aplicação no futuro.
✔️ Faça a sua .NET Framework projeto para pelo menos .NET Framework 4.7.2. Isto garante a disponibilidade das mais recentes alternativas API para casos em que a Norma .NET não suporta as APIs existentes.
✔️ CONSIDERE o alvo .NET 5 em vez de .NET Core 3.1. Enquanto .NET Core 3.1 está sob suporte a longo prazo (LTS), .NET 5 é o mais recente e .NET 6 será LTS quando lançado.
✔️ DO alvo .NET 5 para projetos Windows Forms e WPF. .NET 5 contém muitas melhorias para aplicações de desktop.
✔️ CONSIDERE como alvo .NET Standard 2.0 se estiver a migrar uma biblioteca que também pode ser usada com projetos .NET Framework. Também pode multitarefar a sua biblioteca, direcionando-.NET Framework e .NET Standard.
✔️ Adicione referência ao Microsoft.Windows. Pacote NuGet de compatibilidade se, após migração, tiver erros de APIs em falta. Uma grande parte da superfície API .NET Framework está disponível para .NET através do pacote NuGet.