Analisar suas dependências para fazer a portabilidade do código para o .NET CoreAnalyze your dependencies to port code to .NET Core

Para fazer a portabilidade de seu código para o .NET Core ou .NET Standard, é preciso compreender suas dependências.To port your code to .NET Core or .NET Standard, you must understand your dependencies. As dependências externas são os pacotes NuGet ou os arquivos .dll que você faz referência em seu projeto, mas que você não se compila.External dependencies are the NuGet packages or .dll files you reference in your project, but that you don't build yourself.

Migre seus pacotes NuGet para PackageReferenceMigrate your NuGet packages to PackageReference

O .NET Core usa PackageReference para especificar as dependências do pacote..NET Core uses PackageReference to specify package dependencies. Se você estiver usando Packages. config para especificar seus pacotes em seu projeto, converta-o no formato PackageReference, porque packages.config não tem suporte no .NET Core.If you're using packages.config to specify your packages in your project, convert it to the PackageReference format, because packages.config isn't supported in .NET Core.

Para saber como migrar, consulte o artigo migrar de Packages. config para PackageReference .To learn how to migrate, see the Migrate from packages.config to PackageReference article.

Atualizar seus pacotes NuGetUpgrade your NuGet packages

Depois de migrar seu projeto para o formato de PackageReference, verifique se seus pacotes são compatíveis com o .NET Core.After you migrate your project to the PackageReference format, verify if your packages are compatible with .NET Core.

Primeiro, atualize seus pacotes para a versão mais recente que você pode.First, upgrade your packages to the latest version that you can. Isso pode ser feito com a interface do usuário do Gerenciador de pacotes NuGet no Visual Studio.This can be done with the NuGet Package Manager UI in Visual Studio. É provável que as versões mais recentes das suas dependências de pacote já sejam compatíveis com o .NET Core.It's likely that newer versions of your package dependencies are already compatible with .NET Core.

Analisar suas dependências de pacoteAnalyze your package dependencies

Se você ainda não verificou que suas dependências de pacote convertidas e atualizadas funcionam no .NET Core, há algumas maneiras de conseguir isso:If you haven't already verified that your converted and upgraded package dependencies work on .NET Core, there are a few ways that you can achieve that:

Analisar pacotes NuGet usando nuget.orgAnalyze NuGet packages using nuget.org

Você pode ver os monikers do Framework de destino (TFMs) que cada pacote dá suporte no NuGet.org na seção dependências da página do pacote.You can see the Target Framework Monikers (TFMs) that each package supports on nuget.org under the Dependencies section of the package page.

Embora o uso do site seja um método mais fácil para verificar a compatibilidade, as informações de dependências não estão disponíveis no site para todos os pacotes.Although using the site is an easier method to verify the compatibility, Dependencies information isn't available on the site for all packages.

Analisar pacotes NuGet usando o Explorador de Pacotes NuGetAnalyze NuGet packages using NuGet Package Explorer

Um pacote NuGet é um conjunto de pastas que contêm assemblies específicos de plataforma.A NuGet package is itself a set of folders that contain platform-specific assemblies. Verifique se há uma pasta que contém um assembly compatível dentro do pacote.Check if there's a folder that contains a compatible assembly inside the package.

A maneira mais fácil de inspecionar as pastas do pacote NuGet é usar a ferramenta Gerenciador de pacotes NuGet .The easiest way to inspect NuGet package folders is to use the NuGet Package Explorer tool. Depois da instalação, use as seguintes etapas para ver os nomes de pasta:After installing it, use the following steps to see the folder names:

  1. Abra o Explorador de Pacotes NuGet.Open the NuGet Package Explorer.
  2. Clique em Abrir pacote de feed online.Click Open package from online feed.
  3. Pesquise o nome do pacote.Search for the name of the package.
  4. Selecione o nome do pacote nos resultados da pesquisa e clique em abrir.Select the package name from the search results and click open.
  5. Expanda a pasta lib no lado direito e observe os nomes de pasta.Expand the lib folder on the right-hand side and look at folder names.

Procure uma pasta com nomes usando um dos seguintes padrões: netstandardX.Y ou netcoreappX.Y.Look for a folder with names using one the following patterns: netstandardX.Y or netcoreappX.Y.

Esses valores são TFMs (Monikers da Estrutura de Destino), que são mapeados para versões do .NET Standard, .NET Core e perfis de PCL (Biblioteca de Classes Portátil) tradicionais que são compatíveis com .NET Core.These values are the Target Framework Monikers (TFMs) that map to versions of the .NET Standard, .NET Core, and traditional Portable Class Library (PCL) profiles that are compatible with .NET Core.

Importante

Ao analisar os TFMs compatíveis com um pacote, observe que o netcoreapp*, embora compatível, serve somente para projetos do .NET Core e não para projetos do .NET Standard.When looking at the TFMs that a package supports, note that netcoreapp*, while compatible, is for .NET Core projects only and not for .NET Standard projects. Uma biblioteca destinada somente a netcoreapp* e não a netstandard* só pode ser consumida por outros aplicativos do .NET Core.A library that only targets netcoreapp* and not netstandard* can only be consumed by other .NET Core apps.

Modo de compatibilidade do .NET framework.NET Framework compatibility mode

Depois de analisar os pacotes NuGet, talvez você ache que eles se destinam apenas ao .NET Framework.After analyzing the NuGet packages, you might find that they only target the .NET Framework.

O modo de compatibilidade do .NET Framework foi introduzido a partir do .NET Standard 2.0.Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. Esse modo de compatibilidade permite que os projetos do .NET Standard e do .NET Core referenciem bibliotecas do .NET Framework.This compatibility mode allows .NET Standard and .NET Core projects to reference .NET Framework libraries. Fazer referência a bibliotecas do .NET Framework não funciona para todos os projetos, como nos casos em que a biblioteca usa APIs do WPF (Windows Presentation Foundation), mas isso desbloqueia muitos cenários de portabilidade.Referencing .NET Framework libraries doesn't work for all projects, such as if the library uses Windows Presentation Foundation (WPF) APIs, but it does unblock many porting scenarios.

Ao referenciar pacotes NuGet que se destinam .NET Framework em seu projeto, como Huitian. PowerCollections, você obtém umNU1701(aviso de fallback de pacote) semelhante ao exemplo a seguir:When you reference NuGet packages that target .NET Framework in your project, such as Huitian.PowerCollections, you get a package fallback warning (NU1701) similar to the following example:

NU1701: Package ‘Huitian.PowerCollections 1.0.0’ was restored using ‘.NETFramework,Version=v4.6.1’ instead of the project target framework ‘.NETStandard,Version=v2.0’. This package may not be fully compatible with your project.

Esse aviso será exibido quando você adicionar o pacote e sempre que você compilar, para que você não se esqueça de testar o pacote com o projeto.That warning is displayed when you add the package and every time you build to make sure you test that package with your project. Se o seu projeto funcionar conforme o esperado, você poderá suprimir esse aviso editando as propriedades do pacote no Visual Studio ou editando manualmente o arquivo de projeto em seu editor de código favorito.If your project works as expected, you can suppress that warning by editing the package properties in Visual Studio or by manually editing the project file in your favorite code editor.

Para suprimir o aviso editando o arquivo de projeto, localize a entrada PackageReference do pacote em que você deseja suprimir o aviso e adicione o atributo NoWarn.To suppress the warning by editing the project file, find the PackageReference entry for the package you want to suppress the warning for and add the NoWarn attribute. O atributo NoWarn aceita uma lista separada por vírgulas de todas as IDs de aviso.The NoWarn attribute accepts a comma-separated list of all the warning IDs. O exemplo a seguir mostra como suprimir o aviso NU1701 do pacote Huitian.PowerCollections por meio da edição manual do arquivo de projeto:The following example shows how to suppress the NU1701 warning for the Huitian.PowerCollections package by editing your project file manually:

<ItemGroup>
  <PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" />
</ItemGroup>

Para obter mais informações sobre como suprimir avisos do compilador no Visual Studio, consulte Suprimir avisos de pacotes NuGet.For more information on how to suppress compiler warnings in Visual Studio, see Suppressing warnings for NuGet packages.

O que fazer quando a dependência de pacote NuGet não é executada no .NET CoreWhat to do when your NuGet package dependency doesn't run on .NET Core

Há algumas coisas que você pode fazer se um pacote NuGet do qual você depende não for executado no .NET Core:There are a few things you can do if a NuGet package you depend on doesn't run on .NET Core:

  • Se o projeto for um software livre e estiver hospedado em algum lugar como o GitHub, você poderá entrar em contato diretamente com os desenvolvedores.If the project is open source and hosted somewhere like GitHub, you can engage the developers directly.
  • Você pode entrar em contato com o autor diretamente no NuGet.org. Pesquise o pacote e clique em contatar proprietários no lado esquerdo da página do pacote.You can contact the author directly on nuget.org. Search for the package and click Contact Owners on the left-hand side of the package's page.
  • Você pode pesquisar outro pacote que seja executado no .NET Core e realize a mesma tarefa que o pacote que você estava usando.You can search for another package that runs on .NET Core that accomplishes the same task as the package you were using.
  • Você pode tentar escrever por conta própria o código do que o pacote estava fazendo.You can attempt to write the code the package was doing yourself.
  • Você pode eliminar a dependência do pacote alterando a funcionalidade do aplicativo, pelo menos até que uma versão compatível do pacote fique disponível.You could eliminate the dependency on the package by changing the functionality of your app, at least until a compatible version of the package becomes available.

Lembre-se que os mantenedores de projetos de software livre e os editores de pacote NuGet geralmente são voluntários.Remember that open-source project maintainers and NuGet package publishers are often volunteers. Elas contribuem porque se importam com um determinado domínio, fazem-no gratuitamente e geralmente têm um trabalho diferente durante dia.They contribute because they care about a given domain, do it for free, and often have a different daytime job. Lembre-se disso ao entrar em contato com eles para solicitar suporte ao .NET Core.Be mindful of that when contacting them to ask for .NET Core support.

Se você não puder resolver o problema com nenhuma dessas opções, talvez seja necessário portar para o .NET Core em uma data posterior.If you can't resolve your issue with any of these options, you may have to port to .NET Core at a later date.

A equipe do .NET gostaria de saber quais bibliotecas são as mais importantes para compatibilidade com o .NET Core.The .NET Team would like to know which libraries are the most important to support with .NET Core. Você pode enviar um email para dotnet@microsoft.com, informando sobre as bibliotecas que você deseja usar.You can send an email to dotnet@microsoft.com about the libraries you'd like to use.

Analisar dependências que não são pacotes NuGetAnalyze dependencies that aren't NuGet packages

Você pode ter uma dependência que não seja um pacote NuGet, tal como uma DLL no sistema de arquivos.You may have a dependency that isn't a NuGet package, such as a DLL in the file system. A única maneira de determinar a portabilidade dessa dependência é executar a ferramenta .NET Portability Analyzer.The only way to determine the portability of that dependency is to run the .NET Portability Analyzer tool. A ferramenta analisa os assemblies que visam o .NET Framework e identifica as APIs que não são portáveis para outras plataformas .NET, como o .NET Core.The tool analyzes assemblies that target the .NET Framework and identifies APIs that aren't portable to other .NET platforms such as .NET Core. Você pode executar a ferramenta como um aplicativo de console ou uma extensão do Visual Studio.You can run the tool as a console application or as a Visual Studio extension.

{1>{2>Próximas etapas<2}<1}Next steps