Поиск по сайту:

В чем разница между .NET Framework и .NET Core?


Microsoft предоставляет две разные среды выполнения .NET: .NET Framework и .NET Core. Оба реализуют .NET Standard, и код между ними достаточно кросс-совместим, но .NET Framework работает только в Windows. Мы обсудим различия между двумя средами выполнения.

Краткий ответ: кроссплатформенная совместимость

Быстрый ответ заключается в том, что .NET Core работает в Linux и macOS, а .NET Framework — только в Windows. Вы будете использовать .NET Core, когда вам нужна межплатформенная совместимость, и вы будете использовать .NET Framework, когда вам нужны специфичные для Windows службы и пакеты NuGet, которые не были перенесены в .NET Core.

.NET Core является преемником .NET Framework, поэтому это определенно то, что вы хотите выбрать в будущем. Он оставляет позади некоторые функции, доступные только для Windows, но многие из них все еще могут поддерживаться с помощью расширения пакета совместимости Windows.

В целом Core и Framework почти одинаковы, но на практике у них есть небольшие различия. И .NET Core, и .NET Framework используют один и тот же API, называемый .NET Standard, но Core имеет открытый исходный код, а Framework — это реализация Microsoft только для Windows.

В целом, Core немного легче, чем Framework, поскольку он разработан и часто используется с Docker в бэкэндах на основе микросервисов. Помимо возможности использовать Linux в первую очередь (необходимо для Docker), результирующий образ будет немного меньше с .NET Core.

Помимо этого, большинство различий заключается в различиях пакетов NuGet. Например, Entity Framework Core немного отличается от Entity Framework 6, который работает на платформе .NET Framework. ASP.NET Core сильно отличается от ASP.NET 4, поскольку они многое переработали для .NET Core.

Когда использовать .NET Core

Вы должны использовать .NET Core вместо .NET Framework, когда:

  • Вам нужна межплатформенная совместимость. Сюда входит использование архитектуры Docker и микросервисов.
  • Вы начинаете новый проект, и вам просто нужно выбрать один. (.NET Core новее.)
  • Вы не используете инструменты, библиотеки или пакеты NuGet для Windows, зависящие от .NET Framework.
  • Вам нужна максимальная производительность. Microsoft рекомендует .NET Core с ASP.NET вместо .NET Framework.
  • Вы хотите одновременно запускать несколько версий .NET Core. Фреймворк не поддерживает это.
  • Вам нужен доступ к CLI в Linux или запуск сервера сборки CI/CD в Linux.

Когда использовать .NET Framework

Вы должны использовать .NET Framework вместо .NET Core, когда:

  • Вы ориентируетесь только на развертывания Windows.
  • Вы интенсивно используете пакеты и библиотеки Windows, такие как Windows Forms, WPF, ASP.NET Web Forms/Pages и Windows Workflow Foundation.
  • Используемые вами технологии не добавляются в пакет обеспечения совместимости Windows для .NET Core.
  • Вы уже используете его, и миграция потребует слишком много усилий.

.NET 5 скоро появится

Среда выполнения .NET 5, запланированная к выпуску в ноябре 2020 года, содержит ряд улучшений, но, что наиболее важно, обещает обеспечить единство двух отдельных сред выполнения. У него нет прозвища «Core» или «Framework», поскольку Microsoft сосредоточена на объединении лучшего из обеих сред выполнения в одном пакете.

WPF и Windows Forms поддерживаются в .NET 5, а также во множестве других исправлений совместимости. Хотя это не лучшая замена .NET Framework, она должна быть достаточно хороша, чтобы отлично работать на обеих платформах. Microsoft пока не отказывается от поддержки .NET Framework, но в будущем она, скорее всего, будет постепенно прекращаться.

Как переключиться на .NET Core

Обычно это будет «как вы переключаетесь с Framework -> Core», потому что любой существующий работающий проект на .NET Core, скорее всего, не нужно будет переключаться обратно на более старую .NET Framework.

Если вы используете что-то специфичное для Windows, вы не можете. Вы застряли на .NET Framework до тех пор, пока используемые вами компоненты не получат версии Core, и для некоторых вещей, которые не будут происходить, например, с ASP.NET WebForms.

Самым простым решением было бы создать новое решение и проект на основе .NET Core и перенести свой код. Если у вас есть простое приложение, это, вероятно, самое простое решение.

В противном случае вы можете использовать dotnet try-convert или следовать руководству Microsoft по переносу.

Для больших сложных проектов можно использовать анализатор переносимости .NET. Это инструмент от Microsoft, который просканирует ваш проект, сообщит вам, насколько сложным может быть преобразование, и покажет вам, какими должны быть ваши следующие шаги. Он также может создать ориентированный граф ваших зависимостей, который поможет вам увидеть, что еще требует анализа. Некоторые проекты будет сложнее портировать, чем другие, и если вы используете что-то, чего нет в Core, вы вообще не сможете портировать без обходного пути.