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

Ответ

.NET Core — это кроссплатформенная, открытая реализация .NET, работающая на Windows, Linux и macOS. Оптимизирована для облачных и микросервисных решений, поддерживает side-by-side установку версий.

.NET Framework — только для Windows, закрытый исходный код, тесно интегрирован с ОС (например, WPF, ASP.NET Web Forms).

Ключевые отличия:

Критерий .NET Core / .NET 5+ .NET Framework
Платформа Кроссплатформенный (Windows, Linux, macOS) Только Windows
Развертывание Автономное или зависимое от окружения Глобальная установка в систему
Производительность Выше, оптимизирован для контейнеров и микросервисов Ниже, более монолитный
Поддержка Активно развивается (.NET 6, 7, 8) В режиме обслуживания
Архитектура Модульный, включается только необходимое Монолитный пакет

Пример конфигурации хоста в .NET Core (современный .NET):

using Microsoft.Extensions.Hosting;

var host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services => services.AddHostedService<BackgroundWorker>())
    .Build();

await host.RunAsync();

Совет: Для всех новых проектов выбирайте современный .NET (.NET 6/7/8), который является преемником .NET Core.

Ответ 18+ 🔞

Давай разжую эту тему, как последнюю котлету в столовой, чтобы даже твоя бабушка поняла, если ей вдруг взбредёт в голову микросервисы писать.

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

А вот .NET Core (а теперь просто .NET, начиная с пятёрки) — это шустрая, голодная кошка, которая бегает где угодно: по подоконнику Windows, по крыше Linux, по забору macOS. Она открытая, вся её подноготная — на виду, бери да смотри. И таскать её с собой — одно удовольствие: можешь всю её, вместе с миской и кормом, в один рюкзак (контейнер) запихнуть и запустить где угодно. Она для этого и сделана — для облаков и этих ваших модульных сервисов, которые сейчас все делают.

Короче, в чём разница, если на пальцах:

  • Где работает: .NET Framework — только в окнах (Windows). .NET — везде, где есть хоть какая-то жизнь.
  • Как ставится: Framework — это как глобальная прошивка в систему, всё засоряет. .NET — можешь поставить одну версию для всех, а можешь для каждого проекта свою, отдельную, носить с собой. Никаких конфликтов.
  • Скорость: .NET — просто реактивный заяц, его специально точили под современные штуки. Framework — тот кот на диване, ему бы поспать.
  • Что с ним делать: Все новые проекты — только на современном .NET (6, 7, 8 и дальше). Framework — его уже на пенсию отправили, только подклеивают там, чинят, но нового ничего не жди. Это legacy, наследие, груз прошлого, короче.

Вот смотри, как сейчас просто жизнь выглядит на современном .NET. Раньше надо было городить огород из Startup.cs и кучи методов, а теперь — красота:

using Microsoft.Extensions.Hosting;

// Собираем хост, как конструктор. Всё в одну строку, блять.
var host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services => services.AddHostedService<BackgroundWorker>()) // Добавили фоновую работягу
    .Build(); // Собрали

await host.RunAsync(); // И поехали!

Итог, который в лоб: Если ты начинаешь новый проект и у тебя в требованиях нет слова «поддержка древнего говна с WPF или Web Forms» — даже не думай, не мучай себя. Бери современный .NET (6, 7, 8) и живи спокойно. Всё остальное — это разговор с призраками прошлого, а им, как известно, доверия — ноль ебать.