.NET Framework

.NET Framework — программная платформа компании Microsoft, предназначенная для разработки и выполнения приложений, использующих компоненты платформы .NET. Фреймворк объединяет среду выполнения и богатую программную библиотеку, обобщая работу с различными задачами — от работы с файлами и базами данных до построения оконных интерфейсов и сетевого взаимодействия. Для конечного пользователя .NET Framework представляет собой прослойку, необходимую для запуска приложений, использующих его компоненты.

Что важно знать

История

С выходом Windows Vista платформа стала устанавливаться вместе с операционной системой, после чего обновляется через Windows Update. До появления .NET Core .NET Framework был доступен исключительно для Windows и сыграл важную роль в унификации и модернизации программирования под эту ОС[3]. В её составе присутствуют API для доступа к файловой системе, сетевым ресурсам, базам данных, созданию графики и интерфейсов, а также типовые функции (управление датой и временем, хеширование паролей, математические расчеты, многопоточность для многоядерных процессоров).

Приложения на основе .NET до появления .NET 8 не были самодостаточными: они требовали наличия среды выполнения .NET Framework для запуска, так как код не компилировался напрямую в машинный. В ноябре 2020 года Microsoft объявила о слиянии .NET Core, .NET Standard и .NET Framework в единую платформу под именем .NET 5.0[4]. Программы на базе .NET Framework 4 по-прежнему поддерживаются в Windows 7 / 8 / 10 / 11[5][6].

Разработка платформы .NET велась как попытка обновить устаревшие концепции Windows и стала следствием судебных разбирательств Microsoft и Sun Microsystems по поводу Java. Microsoft исходно модифицировала систему, реализованную Sun, нарушая независимость Java-приложений от платформы, и после запрета на такую практику сменила стратегию, а также попыталась занять рынок мобильных устройств.

К середине 1990-х для Windows существовали независимые, несовместимые друг с другом платформы (решения на C++, Visual Basic, а также Java-подобная Microsoft J++), затруднявшие совместную работу и повторное использование кода.

Строки и кодировки ANSI/Unicode

Реализация строк различалась между платформами, что требовало затрат на перекодировку при обмене данными между ними. Дополнительно проблемы вызывала параллельная поддержка ANSI и Unicode: многие программы не умели работать с Unicode. В .NET Framework используется единая поддержка Unicode для строк.

Управление памятью

Различные среды разработки реализовывали собственные системы управления памятью. Visual Basic и J++ поддерживали автоматическую сборку мусора, а C++ — нет, требуя ручного контроля со стороны программиста.

Открытость исходного кода

17 января 2008 года Microsoft опубликовала исходный код платформы под ограничительной Microsoft Reference License. Это стало реакцией на открытие Sun исходников Java под GNU GPL.

В конце 2013 года Microsoft, Xamarin (Mono) и ряд других компаний учредили фонд .NET Foundation, которому были переданы права на большую часть библиотек .NET; в 2014 году под его управлением находились 30 проектов[7].

Отношения с Mono

Часть сообщества разработчиков опасалась, что публикуемый код под ограничительной лицензией представляет угрозу для проекта Mono — реализации .NET для Linux[8]. Заключённое между Microsoft и Novell[9] патентное соглашение защищало стороны от взаимных претензий.

После создания .NET Foundation и перехода прав на код .NET Foundation, Microsoft и Xamarin (Mono) сотрудничают для обеспечения кроссплатформенности .NET. Благодаря публикации существенной части кода под лицензией MIT или Apache 2.0, теперь его можно использовать и в закрытых продуктах. Риски патентных конфликтов существенно снижены[10].

Хронология развития .NET Framework

Год События
2000
  • Июнь — Билл Гейтс впервые представляет концепцию .NET.
  • Июль — На конференции Professional Developers Conference (PDC) распространяются предрелизные версии платформы и Visual Studio .NET.
  • Октябрь — Язык C# и CLI подаются в ECMA на стандартизацию (Microsoft, HP, Intel).
2002
  • Январь — официальный релиз .NET (V1.0) с SDK и Visual Studio .NET 2002.
2003
  • Представлены .NET 1.1 и Visual Studio 2003.
2005
  • Доступны бета-версии .NET 2.0 и Visual Studio 2005.
  • 7 ноября: выпуск Visual Studio 2005 и .NET Framework 2.0 в США.
  • 19 декабря: немецкая версия .NET Framework 2.0.
2006
  • 6 февраля: Visual Studio 2005 на немецком.
  • 6 ноября: релиз .NET Framework 3.0.
2007
  • Анонсы .NET 3.5 и Visual Studio 2008.
  • 19 ноября: релиз .NET 3.5 и Visual Studio 2008 в США.
2008
  • 17 января: публикация исходных кодов .NET Framework.
  • Февраль: релизы Visual Studio 2008, SQL Server 2008, Windows Server 2008.
2009
  • 18 мая: .NET 4.0 Beta 1.
  • 19 октября: .NET 4.0 Beta 2.
2010
  • 10 февраля: релиз-кандидат .NET 4.0.
  • 12 апреля: финальные версии .NET 4.0 и Visual Studio 2010.
2012
  • 31 мая: .NET 4.5 RC.
  • 15 августа: финальная версия .NET 4.5.
2013
  • 12 октября: финальный релиз .NET 4.5.1.
2014
  • 5 мая: финальный релиз .NET 4.5.2.
2015
  • 20 июля: релиз .NET 4.6.
  • 17 ноября: .NET 4.6.1.
2016
  • 20 июля: .NET 4.6.2.
2017
  • 5 апреля: .NET 4.7 входит в Windows 10 Creators Update.
  • 2 мая: самостоятельный релиз .NET 4.7.
  • 17 октября: выходит .NET 4.7.1.
2018
  • 30 апреля: релиз .NET 4.7.2.
2019
  • 18 апреля: релиз .NET 4.8.
2022
  • 9 августа: релиз .NET 4.8.1.

Концепция и компоненты

.NET Framework реализует стандарт Common Language Infrastructure (CLI), предоставляя среду выполнения для программ на различных языках и библиотеки для ускорения разработки. Ключевыми частями платформы являются объектно-ориентированная среда исполнения Common Language Runtime (CLR), библиотека базовых классов (Base Class Library, BCL) и вспомогательные средства, например, для управления правами.

Common Language Runtime: CLR отвечает за исполнение кода .NET, содержит JIT-компилятор для Common Intermediate Language (CIL, ранее MSIL), определяет кросс-языковую систему типов. Каждая .NET-языковая реализация компилируется в CIL. Под управлением CLR запускается так называемый управляемый код (managed code), но возможно и исполнение небезопасного (unsafe) кода с указателями, если это необходимо[11].

Interop позволяет подключать к .NET уже существующие нативные (неуправляемые) библиотеки Windows — через обёртки (wrappers). Таким образом, можно поэтапно переносить проекты на .NET и облегчать интеграцию.

Безопасность: В .NET реализованы механизмы аутентификации производителя (авторство), защиты от изменения кода (целостность), и разграничения по ролям и источникам запуска (code-based и role-based security).

Атрибуты — ключевая особенность .NET: позволяет добавлять к коду специализированные метаданные, влияющие на поведение системы, безопасность, распределённые транзакции, описательные свойства компонентов. К атрибутам можно обращаться через reflection.

Распределённое программирование и веб-сервисы. С версии 3.0 в .NET появилась Windows Communication Foundation для унификации взаимодействия в распределённых приложениях (заменяет ASP.NET Web Services, MSMQ, .NET Remoting и т. д.)[12].

Языковая независимость: CLS (Common Language Specification) определяет общий набор возможностей CIL, которым должны удовлетворять поддерживаемые языки. Помимо языков Microsoft (C#, F#, Visual Basic .NET, C++/CLI), под .NET доступны сторонние (например, Delphi Prism, APL). Единая система типов (Common Type System) ликвидирует трудности взаимодействия между языками.

Платформенная независимость: В 2002 году Microsoft представила Shared Source CLI (SSCLI) для macOS и FreeBSD (ограниченная реализация). Позднее появилась версия 2.0 (поддержка Windows XP SP2). На текущее время реализация платформы в полном виде официально поддерживается только под Windows, хотя такие альтернативы, как Mono, обеспечивают совместимость на Linux и macOS.

Виртуальная машина: Управляемый код (managed code) выполняется в среде CLR с автоматическим управлением памятью (garbage collection), контролем доступа к ресурсам и соблюдением политик безопасности.

Производительность: Для сокращения издержек от виртуализации и повышения скорости используются JIT-компиляция, а также возможность предварительной компиляции в нативные образы. Тем не менее, наличие сборщика мусора и абстракций увеличивает требования к ресурсам и непредсказуемость задержек — что ограничивает применение .NET в жёстких реалтайм-приложениях.

Классовая библиотека — Framework Class Library (FCL) включает десятки тысяч классов, сгруппированных по сотням пространств имён[13]. Выполняет задачи от работы с текстом и почтой до генерации кода.

Выполнение программ. Компилятор .NET-языков не создаёт нативный машинный код, а транслирует в протокол Common Intermediate Language (IL), исполняемый виртуальной машиной. PE-заголовки в exe-файлах совместимы с Windows, но запуск требует инит-кода, запускающего CLR. При исполнении JIT-компилятор преобразует IL в машинный код процессора.

Сборки (Assemblies): Cкомпилированные единицы (exe или dll), которые содержат как собственно код, так и метаданные (manifest), что позволяет запускать .NET-программы без регистрации компонентов в системе (за исключением некоторых случаев). Возможны сборки трёх видов: приватные (private), общие (shared, требуют strong name), глобальные (устанавливаются в GAC — Global Assembly Cache).

Доступность, стандартизация, альтернативы

Полная реализация .NET Framework официально доступна только для Windows. В 2008 году Microsoft открыла часть исходного кода; многие компоненты стандартизованы как Common Language Infrastructure — ECMA-стандарт. Альтернативные реализации (например, Mono) обеспечивают совместимость приложений .NET на Linux и macOS.

Microsoft поставляет .NET Framework в виде среды исполнения (runtime), бесплатного SDK, платной интегрированной среды разработки (Visual Studio). Для студентов доступны бесплатные редакции Visual Studio Express, существует и свободная IDE SharpDevelop. Начиная с Windows Server 2003, серверные ОС поставляются с интегрированной средой исполнения .NET; в более ранних версиях её можно установить отдельно (поддержка с Windows NT 4.0/98). С Windows Vista .NET Framework — неотъемлемая часть операционной системы.

Версии

Краткий обзор

Разработка .NET Framework началась в конце 1990-х (первоначальное название — Next Generation Windows Services, NGWS), первые бета-релизы вышли в конце 2000 года.

undefined
Версия Номер версии Дата Присутствует в
1.0 1.0.3705.0 5 января 2002
1.1 1.1.4322.573 1 апреля 2003 Windows Server 2003
2.0 2.0.50727.42 7 ноября 2005 Windows Server 2003 R2
3.0 3.0.4506.30 6 ноября 2006 Windows Vista, Windows Server 2008
3.5 3.5.21022.8 9 ноября 2007 Windows Server 2008 R2
3.5 SP 1 3.5.30729.1 11 августа 2008 Windows 7 с SP1
4.0 4.0.30319 12 апреля 2010
4.5 4.5.50501 15 августа 2012 Windows 8, Windows Server 2012
4.5.1 4.5.50938 12 октября 2013 Windows 8.1, Windows Server 2012 R2
4.5.2 4.5.51090 5 мая 2014 Windows 8.1, Windows Server 2012 R2
4.6 4.6.00081 10 июля 2015 Windows 10, Windows Server 2016
4.6.1 17 ноября 2015
4.6.2 20 июля 2016
4.7 11 апреля 2017
4.7.1 13 октября 2017
4.7.2 4.7.3081.0 10 июля 2018 Windows Server 2019
4.8 4.8.3761.0 18 апреля 2019
4.8.1 9 августа 2022

Примечания

Литература

  • Вольфганг Бир и др. «Die .NET-Technologie: Grundlagen und Anwendungsprogrammierung.» dpunkt Verlag 2006, ISBN 978-3-89864-421-1.
  • Дино Эспозито, Андреа Салтарелло: «Architecting Applications for the Enterprise: Microsoft .NET.» Microsoft Press, Second Edition 2014, ISBN 978-0-7356-8535-2.
  • Юрген Котц и др.: «.NET 3.0. WPF, WCF und WF – ein Überblick»; Addison-Wesley, Мюнхен, февраль 2007, ISBN 3-8273-2493-9.
  • Даниэль Либхарт и др.: «Architecture Blueprints»; Hanser Verlag, 2007, ISBN 978-3-446-41201-9.
  • Джеффри Рихтер: «Microsoft .NET Framework-Programmierung in C#. Expertenwissen zur CLR und dem .NET Framework 2.0.» Microsoft Press, 2-е изд., 2006, ISBN 978-3-86063-984-9.
  • Хольгер Швихтенберг: «Microsoft .NET 2.0 Crashkurs.» Microsoft Press, Унтершлайсхайм, 2006, ISBN 3-86063-987-0.
  • Хольгер Швихтенберг: «Microsoft .NET 3.0 Crashkurs.» Microsoft Press, Унтершлайсхайм, 2007, ISBN 3-86645-501-1.
  • Хольгер Швихтенберг и др.: «Microsoft .NET 4.5 Update.» Microsoft Press 2012, ISBN 978-3-86645-468-2.

Ссылки