stringtranslate.com

.NET Framework

.NET Framework (произносится как « дот нет ») — это фирменная программная среда , разработанная корпорацией Microsoft , которая в основном работает на Microsoft Windows . Она была преобладающей реализацией Common Language Infrastructure (CLI) до тех пор, пока не была заменена кроссплатформенным проектом .NET . Она включает в себя большую библиотеку классов, называемую Framework Class Library (FCL), и обеспечивает языковую совместимость (каждый язык может использовать код, написанный на других языках) на нескольких языках программирования . Программы, написанные для .NET Framework, выполняются в программной среде (в отличие от аппаратной среды), называемой Common Language Runtime (CLR). CLR — это виртуальная машина приложений , которая предоставляет такие службы, как безопасность, управление памятью и обработка исключений . Таким образом, компьютерный код, написанный с использованием .NET Framework, называется « управляемым кодом ». FCL и CLR вместе составляют .NET Framework.

FCL обеспечивает пользовательский интерфейс , доступ к данным , подключение к базам данных , криптографию , разработку веб-приложений , числовые алгоритмы и сетевые коммуникации . Программисты создают программное обеспечение, объединяя свой исходный код с .NET Framework и другими библиотеками. Фреймворк предназначен для использования большинством новых приложений, созданных для платформы Windows. Microsoft также выпускает интегрированную среду разработки для программного обеспечения .NET под названием Visual Studio .

.NET Framework начинался как проприетарное программное обеспечение , хотя фирма работала над стандартизацией программного стека почти сразу, еще до его первого выпуска. Несмотря на усилия по стандартизации, разработчики, в основном из сообществ свободного и открытого программного обеспечения , выразили свое беспокойство по поводу выбранных условий и перспектив любой свободной и открытой реализации, особенно в отношении патентов на программное обеспечение . С тех пор Microsoft изменила разработку .NET, чтобы более точно следовать современной модели программного проекта, разработанного сообществом, включая выпуск обновления к своему патенту, обещая устранить опасения. [2]

В апреле 2019 года Microsoft выпустила .NET Framework 4.8, последнюю основную версию фреймворка в качестве фирменного предложения, за которой в августе 2022 года последовал .NET Framework 4.8.1. С тех пор выпускались только ежемесячные исправления ошибок безопасности и надежности для этой версии. Дальнейшие изменения этой версии не планируются. .NET Framework будет по-прежнему включаться в будущие выпуски Windows и продолжать получать обновления безопасности, без планов по его удалению с ноября 2023 года. [3]

История

Microsoft начала разрабатывать .NET Framework в конце 1990-х годов, первоначально под названием Next Generation Windows Services (NGWS), как часть стратегии .NET . К началу 2000 года были выпущены первые бета-версии .NET 1.0.

В августе 2000 года Microsoft и Intel работали над стандартизацией Common Language Infrastructure (CLI) и C# . К декабрю 2001 года оба были ратифицированы стандартами ECMA . [4] [5] Международная организация по стандартизации (ISO) последовала за ними в апреле 2003 года. Текущие версии стандартов ISO — ISO/IEC 23271:2012 и ISO/IEC 23270:2006. [6] [7]

В то время как Microsoft и их партнеры владеют патентами на CLI и C#, ECMA и ISO требуют, чтобы все патенты, необходимые для реализации, были доступны на « разумных и недискриминационных условиях ». Фирмы согласились соблюдать эти условия и сделать патенты доступными без уплаты роялти. Однако это не относилось к части .NET Framework, не охваченной стандартами ECMA-ISO, которая включала Windows Forms , ADO.NET и ASP.NET . Патенты, которыми владеет Microsoft в этих областях, могли сдерживать не-Microsoft реализации полной платформы. [8]

Windows Vista — первая клиентская версия Windows, в которую интегрирована .NET Framework.

3 октября 2007 года Microsoft объявила, что исходный код библиотек .NET Framework 3.5 станет доступен по лицензии Microsoft Reference Source License (Ms-RSL [a] ). [9] Репозиторий исходного кода стал доступен онлайн 16 января 2008 года и включал BCL, ASP.NET, ADO.NET, Windows Forms, WPF и XML. Скотт Гатри из Microsoft пообещал, что будут добавлены библиотеки LINQ, WCF и WF. [10]

Варианты .NET Framework Compact Framework и .NET Micro Framework обеспечивали поддержку других платформ Microsoft, таких как Windows Mobile , Windows CE и других встраиваемых устройств с ограниченными ресурсами. Silverlight обеспечивал поддержку веб-браузеров через подключаемые модули.

Логотип Microsoft .NET Framework v4.5

В ноябре 2014 года Microsoft также выпустила обновление своих патентных грантов, которое еще больше расширяет сферу действия за пределы предыдущих обещаний. Предыдущие проекты, такие как Mono, существовали в правовой серой зоне, поскольку предыдущие гранты Microsoft применялись только к технологии в «охваченных спецификациях», включая строго 4-е издания ECMA-334 и ECMA-335. Однако новое патентное обещание не устанавливает потолка для версии спецификации и даже распространяется на любые технологии среды выполнения .NET, задокументированные на MSDN, которые не были официально указаны группой ECMA, если проект решит их реализовать. Это позволяет Mono и другим проектам поддерживать паритет функций с современными функциями .NET, которые были введены после публикации 4-го издания, не подвергаясь риску патентного разбирательства по поводу реализации этих функций. Новый грант сохраняет ограничение, что любая реализация должна поддерживать минимальное соответствие обязательным частям спецификации CLI. [11]

31 марта 2016 года на конференции Microsoft Build компания Microsoft объявила , что полностью перелицензирует Mono по лицензии MIT даже в тех случаях, когда ранее требовалась коммерческая лицензия. [12] Компания Microsoft также дополнила свое предыдущее патентное обещание по Mono, заявив, что не будет заявлять о каких-либо «применимых патентах» против сторон, которые «используют, продают, предлагают для продажи, импортируют или распространяют Mono». [13] [14] Было объявлено, что проект Mono был передан в .NET Foundation. Эти разработки последовали за приобретением Xamarin , которое началось в феврале 2016 года и было завершено 18 марта 2016 года. [15]

В пресс-релизе Microsoft подчеркивается, что кроссплатформенное обязательство теперь позволяет использовать полностью открытый исходный код, современный серверный стек .NET. Microsoft выпустила исходный код для WPF, Windows Forms и WinUI 4 декабря 2018 года. [16]

Архитектура

Визуальный обзор Common Language Infrastructure (CLI)

Общая языковая инфраструктура

Common Language Infrastructure (CLI) предоставляет нейтральную по отношению к языку платформу для разработки и выполнения приложений. Реализуя основные аспекты .NET Framework в рамках CLI, эти функции не будут привязаны к одному языку, а будут доступны на многих языках, поддерживаемых фреймворком.

Среда выполнения общего языка

.NET Framework включает в себя Common Language Runtime (CLR). Он служит в качестве исполняющего движка .NET Framework и предлагает множество служб, таких как управление памятью , безопасность типов , обработка исключений , сборка мусора , безопасность и управление потоками . Все программы, написанные для .NET Framework, выполняются CLR.

Программы, написанные для .NET Framework, компилируются в код Common Intermediate Language (CIL), а не напрямую компилируются в машинный код . Во время выполнения архитектурно-специфичный компилятор JIT преобразует код CIL в машинный код.

Ассамблеи

Скомпилированный код CIL хранится в сборках CLI . Как предписано спецификацией, сборки хранятся в формате файла Portable Executable (PE), общем для всех динамически подключаемых библиотек (DLL) и исполняемых EXE- файлов на платформе Windows. Каждая сборка состоит из одного или нескольких файлов, один из которых должен содержать манифест с метаданными для сборки. Полное имя сборки (не путать с именем файла на диске) содержит ее простое текстовое имя, номер версии, культуру и токен открытого ключа . Сборки считаются эквивалентными, если они имеют одинаковое полное имя.

Закрытый ключ также может использоваться создателем сборки для строгого именования . Токен открытого ключа определяет реальную личность подписавшего сборку. Только те, кто знает свой закрытый ключ (системы криптографии с двойным ключом), могут подписывать сборки, имеющие то же строгое имя, что и сборка предыдущей версии. Строгое именование требуется для добавления сборок в Global Assembly Cache .

Начиная с Visual Studio 2015, технология компиляции .NET Native позволяет компилировать код .NET приложений универсальной платформы Windows непосредственно в машинный код, а не в код CIL, но приложение должно быть написано либо на C#, либо на Visual Basic.NET. [17]

Библиотека классов

.NET Framework включает реализацию основополагающих стандартных библиотек CLI . Библиотека классов .NET Framework (FCL) организована в иерархии пространств имен . Большинство встроенных интерфейсов прикладного программирования (API) являются частью либо пространств имен System.*, либо Microsoft.*пространств имен. Эти библиотеки классов реализуют множество общих функций, таких как чтение и запись файлов, графическая визуализация, взаимодействие с базами данных и манипулирование XML-документами. Библиотеки классов доступны для всех языков, совместимых с CLI . FCL реализует библиотеку базовых классов CLI (BCL) и другие библиотеки классов — некоторые из них указаны CLI, а другие являются специфичными для Microsoft.

BCL включает в себя небольшое подмножество всей библиотеки классов и является основным набором классов, которые служат базовым API CLR. [18] Для .NET Framework большинство классов, считающихся частью BCL, находятся в mscorlib.dll, System.dllи System.Core.dll. Классы BCL доступны в .NET Framework, а также в альтернативных реализациях CLI, включая .NET Compact Framework , Microsoft Silverlight , .NET Core и Mono .

FCL относится ко всей библиотеке классов, которая поставляется с .NET Framework. Она включает BCL, расширенный набор библиотек, включая Windows Forms , ASP.NET и Windows Presentation Foundation (WPF), а также расширения базовых библиотек классов ADO.NET , Language Integrated Query (LINQ), Windows Communication Foundation (WCF) и Workflow Foundation (WF). FCL намного больше по объему, чем стандартные библиотеки для таких языков, как C++ , и сопоставима по объему со стандартными библиотеками Java .

С введением альтернативных реализаций CLI (например, Silverlight) Microsoft представила концепцию Portable Class Libraries (PCL), позволяющую потребляющей библиотеке работать на более чем одной реализации. С дальнейшим распространением реализаций подход PCL не смог масштабироваться (PCL — это определенные пересечения поверхности API между двумя или более реализациями). [19] В качестве следующего эволюционного шага PCL была создана библиотека .NET Standard Library, основанная на System.Runtime.dllAPI, найденных в UWP и Silverlight. Новые реализации CLI поощряются к реализации версии библиотеки Standard Library, позволяющей им запускать существующие сторонние библиотеки без необходимости создания их новых версий. Библиотека .NET Standard Library допускает независимую эволюцию слоев библиотеки и модели приложения в архитектуре .NET. [20]

NuGet — это менеджер пакетов для всех платформ .NET. Он используется для извлечения сторонних библиотек в проект .NET с помощью глобального библиотечного фида на NuGet.org. [21] Частные фиды могут поддерживаться отдельно, например, сервером сборки или каталогом файловой системы.

Диаграмма пакета UML иерархии потоков в .NET

C++/CLI

Microsoft представила C++/CLI в Visual Studio 2005, который является языком и средством компиляции программ Visual C++ для запуска в .NET Framework. Некоторые части программы C++ по-прежнему работают в неуправляемой среде выполнения Visual C++ , в то время как специально измененные части транслируются в код CIL и запускаются с помощью CLR .NET Framework .

Сборки, скомпилированные с использованием компилятора C++/CLI, называются сборками смешанного режима, поскольку они содержат собственный и управляемый код в одной и той же DLL. [22] Такие сборки сложнее поддаются обратному проектированию, поскольку декомпиляторы .NET , такие как .NET Reflector, раскрывают только управляемый код.

Принципы проектирования

Взаимодействие

Поскольку компьютерные системы обычно требуют взаимодействия между новыми и старыми приложениями, .NET Framework предоставляет средства для доступа к функциям, реализованным в новых и старых программах, которые выполняются вне среды .NET. Доступ к компонентам Component Object Model (COM) предоставляется в System.Runtime.InteropServicesи System.EnterpriseServicesпространствах имен фреймворка. Доступ к другим функциям осуществляется через Platform Invocation Services (P/Invoke). Доступ к функциям .NET из собственных приложений осуществляется через обратную функцию P/Invoke.

Языковая независимость

.NET Framework представляет Common Type System (CTS), которая определяет все возможные типы данных и программные конструкции, поддерживаемые CLR, а также то, как они могут или не могут взаимодействовать в соответствии со спецификациями CLI. Благодаря этой функции .NET Framework поддерживает обмен типами и экземплярами объектов между библиотеками и приложениями, написанными с использованием любого соответствующего языка CLI .

Тип безопасности

CTS и CLR, используемые в .NET Framework, также обеспечивают безопасность типов . Это предотвращает некорректные приведения типов, неправильные вызовы методов и проблемы с размером памяти при доступе к объекту. Это также делает большинство языков CLI статически типизированнымивыводом типа или без него ). Однако, начиная с .NET Framework 4.0, Dynamic Language Runtime расширил CLR, позволив реализовать динамически типизированные языки поверх CLI.

Портативность

Хотя Microsoft никогда не реализовывала полную структуру ни на одной системе, кроме Microsoft Windows, она спроектировала структуру как кроссплатформенную, [23] и реализации доступны для других операционных систем (см. Silverlight и § Альтернативные реализации). Microsoft представила спецификации для CLI (включая библиотеки базовых классов, CTS и CIL), [24] [25] [26] C# , [5] и C++/CLI [27] как в Ecma International (ECMA), так и в Международной организации по стандартизации (ISO), сделав их доступными в качестве официальных стандартов. Это позволяет третьим сторонам создавать совместимые реализации структуры и ее языков на других платформах.

Кроссплатформенный .NET Core (ранее .NET Core) официально доступен также для многих дистрибутивов Linux и MacOS. [28]

Безопасность

.NET Framework имеет собственный механизм безопасности с двумя общими функциями: Code Access Security (CAS) и проверка и верификация. CAS основан на доказательствах, связанных с определенной сборкой. Обычно доказательством является источник сборки (независимо от того, установлена ​​ли она на локальном компьютере или была загружена из Интернета). CAS использует доказательства для определения разрешений, предоставленных коду. Когда вызывающий код требует предоставления ему определенного разрешения, CLR выполняет обход стека вызовов, проверяя каждую сборку каждого метода в стеке вызовов на наличие требуемого разрешения; если какой-либо сборке не предоставлено разрешение, она выдаст исключение безопасности.

Управляемый байт-код CIL легче поддается обратному проектированию, чем собственный код, если только он не запутан . [29] Программы- декомпиляторы .NET позволяют разработчикам, не имеющим навыков обратного проектирования, просматривать исходный код, стоящий за незапутанными сборками .NET. Напротив, приложения, скомпилированные в собственный машинный код, гораздо сложнее поддаются обратному проектированию, а исходный код почти никогда не создается успешно, в основном из-за оптимизаций компилятора и отсутствия рефлексии . [30] Это вызывает опасения в бизнес-сообществе по поводу возможной потери коммерческих секретов и обхода механизмов контроля лицензий. Чтобы смягчить это, Microsoft включила Dotfuscator Community Edition в Visual Studio .NET с 2002 года. [b] Сторонние инструменты обфускации также доступны от таких поставщиков, как VMware , Vi Labs, Turbo и Red Gate Software . Инструменты шифрования на уровне методов для кода .NET доступны от таких поставщиков, как SafeNet .

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

CLR освобождает разработчика от бремени управления памятью (выделения и освобождения по завершении); он сам управляет памятью, определяя, когда память может быть безопасно освобождена. Экземпляры типов .NET (объектов) выделяются из управляемой кучи; пула памяти, управляемого CLR. Пока существует ссылка на объект, которая может быть как прямой, так и через граф объектов , объект считается используемым. Когда ссылки на объект не существует и он не может быть получен или использован, он становится мусором, подлежащим сборке.

.NET Framework включает сборщик мусора (GC), который периодически запускается в отдельном потоке от потока приложения, который перечисляет все неиспользуемые объекты и освобождает выделенную им память. Это недетерминированный, уплотняющий сборщик мусора с функцией «марки и уборки» . GC запускается только тогда, когда был использован установленный объем памяти или в системе достаточно нехватки памяти. Поскольку не гарантируется, когда будут достигнуты условия для освобождения памяти, запуски GC являются недетерминированными . Каждое приложение .NET имеет набор корней, которые являются указателями на объекты в управляемой куче ( управляемые объекты ). К ним относятся ссылки на статические объекты, объекты, определенные как локальные переменные или параметры методов, которые в данный момент находятся в области действия, и объекты, на которые ссылаются регистры ЦП. [31] Когда запускается GC, он приостанавливает приложение, а затем для каждого объекта, на который ссылается корень, он рекурсивно перечисляет все объекты, достижимые из корневых объектов, и помечает их как достижимые. Он использует метаданные CLI и рефлексию для обнаружения объектов, инкапсулированных объектом, а затем рекурсивно обходит их. Затем он перечисляет все объекты в куче (которые изначально были выделены смежно) с помощью рефлексии. Все объекты, не помеченные как достижимые, являются мусором. [31] Это фаза маркировки . [32] Поскольку память, занимаемая мусором, не имеет значения, она считается свободным пространством. Однако это оставляет куски свободного пространства между объектами, которые изначально были смежными. Затем объекты сжимаются вместе , чтобы сделать свободное пространство в управляемой куче снова смежным. [31] [32] Любая ссылка на объект, аннулированная перемещением объекта, обновляется GC для отражения нового местоположения. [32] Приложение возобновляется после завершения сборки мусора. Последняя версия .NET Framework использует параллельную сборку мусора вместе с пользовательским кодом, делая паузы незаметными, поскольку это происходит в фоновом режиме. [33]

Сборщик мусора, используемый .NET Framework, также является поколенческим . [34] Объектам назначается поколение . Вновь созданные объекты помечаются как Поколение 0. Объекты, пережившие одну сборку мусора, помечаются как Поколение 1. Объекты поколения 1, пережившие другую сборку, называются Поколение 2. Фреймворк использует до объектов поколения 2. [34] Объекты более высокого поколения подвергаются сборке мусора реже, чем объекты более низкого поколения. Это повышает эффективность сборки мусора, поскольку более старые объекты, как правило, имеют более длительное время жизни, чем более новые объекты. [34] Игнорируя старые объекты в большинстве запусков сборки, в целом требуется меньше проверок и операций уплотнения. [34]

Производительность

При первом запуске приложения .NET Framework компилирует код CIL в исполняемый код с помощью своего just-in-time компилятора и кэширует исполняемую программу в .NET Native Image Cache. [35] [36] Благодаря кэшированию приложение запускается быстрее при последующих запусках, хотя первый запуск обычно медленнее. Чтобы ускорить первый запуск, разработчики могут использовать утилиту Native Image Generator , чтобы вручную заранее скомпилировать и кэшировать любое .NET-приложение. [36]

Сборщик мусора, интегрированный в среду, может вносить непредвиденные задержки выполнения, над которыми разработчик имеет мало прямого контроля. «В больших приложениях количество объектов, с которыми должен работать сборщик мусора, может стать очень большим, что означает, что может потребоваться очень много времени, чтобы посетить и переупорядочить их все». [37]

.NET Framework предоставляет поддержку вызова потоковых расширений SIMD (SSE) через управляемый код с апреля 2014 года в Visual Studio 2013 Update 2. Однако Mono предоставила поддержку расширений SIMD с версии 2.2 в пространстве имен Mono.Simd в 2009 году. [38] Ведущий разработчик Mono Мигель де Икаса выразил надежду, что эта поддержка SIMD будет принята стандартом CLR ECMA. [39] Потоковые расширения SIMD были доступны в процессорах x86 с момента появления Pentium III . Некоторые другие архитектуры, такие как ARM и MIPS, также имеют расширения SIMD. В случае, если процессор не поддерживает эти расширения, инструкции моделируются программно. [40] [41]

Альтернативные реализации

.NET Framework была преобладающей реализацией CLI до выпуска .NET . Существуют и другие реализации частей фреймворка. Хотя механизм выполнения описан спецификацией ECMA-ISO, другие его реализации могут быть обременены патентными проблемами; стандарты ISO могут включать отказ от ответственности: «Обращаем внимание на возможность того, что некоторые элементы этого документа могут быть предметом патентных прав. ISO не несет ответственности за определение любых или всех таких патентных прав». [42] Сложнее разработать альтернативы FCL, который не описан открытым стандартом и может подлежать ограничениям авторских прав. Кроме того, части FCL имеют специфичные для Windows функции и поведение, поэтому реализация на платформах, отличных от Windows, может быть проблематичной.

Здесь перечислены некоторые альтернативные реализации частей фреймворка.

Лицензирование

Фреймворки управляемого кода Microsoft и их компоненты лицензируются следующим образом:

Смотрите также

Примечания

  1. ^ ab Ранее лицензия имела сокращенное название Ms-RL, но теперь Ms-RL относится к Microsoft Reciprocal License .
  2. ^ Dotfuscator Community Edition 4.0

Ссылки

  1. ^ "Загрузить .NET Framework 4.8 Offline Installer". Microsoft . Архивировано из оригинала 15 августа 2019 г. . Получено 15 августа 2019 г. .
  2. ^ Ибаньес, Луис (19 ноября 2014 г.). «Microsoft присоединяется к открытому исходному коду». Opensource.com . Архивировано из оригинала 2 января 2020 г. . Получено 2 января 2020 г. .
  3. ^ gewarren. "Версии .NET Framework и Windows OS". Microsoft Learn . Архивировано из оригинала 3 сентября 2022 г. Получено 21 ноября 2020 г.
  4. ^ "Standard ECMA-335: Common Language Infrastructure (CLI)" (6-е изд.). ECMA . Июнь 2012. Архивировано из оригинала 29 июня 2013. Получено 31 августа 2005 .
  5. ^ ab "Standard ECMA-334: C# Language Specification" (4-е изд.). ECMA . Июнь 2006. Архивировано из оригинала 31 октября 2010 г. Получено 31 августа 2005 г.
  6. ^ "ISO/IEC 23271:2012 Information technology – Common Language Infrastructure" (3-е изд.). Международная организация по стандартизации . 13 февраля 2012 г. Архивировано из оригинала 17 марта 2012 г. Получено 17 марта 2012 г.
  7. ^ "ISO/IEC 23270:2006 – Информационные технологии – Языки программирования – C#" (2-е изд.). Международная организация по стандартизации . 26 января 2012 г. Архивировано из оригинала 6 декабря 2010 г. Получено 1 апреля 2008 г.
  8. ^ Смит, Бретт (16 июля 2009 г.). "Microsoft's Empty Promise". Free Software Foundation . Архивировано из оригинала 19 августа 2009 г. Получено 3 августа 2009 г. Однако есть несколько библиотек, которые включены в Mono и обычно используются такими приложениями, как Tomboy, но не требуются стандартом. И просто для ясности: мы не говорим о библиотеках, специфичных для Windows, таких как ASP.NET и Windows Forms. Вместо этого мы говорим о библиотеках в пространстве имен System, которые предоставляют общие функциональные возможности, ожидаемые программистами в современных языках программирования.
  9. ^ ab Guthrie, Scott (3 октября 2007 г.). "Выпуск исходного кода для NET Framework". Блог Скотта Гатри . Microsoft . Архивировано из оригинала 7 сентября 2010 г. Получено 15 сентября 2010 г.
  10. ^ Гатри, Скотт (16 января 2008 г.). «Исходный код библиотеки .NET Framework теперь доступен». Блог Скотта Гатри . Microsoft . Архивировано из оригинала 18 марта 2015 г. Получено 28 февраля 2015 г.
  11. ^ "Microsoft Patent Promise for .NET Libraries and Runtime Components". GitHub . Архивировано из оригинала 21 февраля 2021 г. Получено 16 ноября 2014 г.
  12. ^ Крилл, Пол (1 апреля 2016 г.). «Среда выполнения Mono от Xamarin получает более свободную лицензию». InfoWorld . IDG . Архивировано из оригинала 16 апреля 2016 г. . Получено 13 апреля 2016 г. .
  13. ^ Ферраира, Бруно (31 марта 2016 г.). «Xamarin теперь поставляется бесплатно с Visual Studio». Технический отчет . Архивировано из оригинала 2 апреля 2016 г. Получено 12 апреля 2016 г.
  14. ^ "Microsoft Patent Promise for Mono". Mono на GitHub . 28 марта 2016 г. Архивировано из оригинала 16 апреля 2016 г. Получено 16 апреля 2016 г.
  15. ^ ab Friedman, Nat (31 марта 2016 г.). "Xamarin для всех". Блог Xamarin . Архивировано из оригинала 12 апреля 2016 г. Получено 12 апреля 2016 г.
  16. ^ Галло, Кевин (4 декабря 2018 г.). «Анонс Open Source WPF, Windows Forms и WinUI на Microsoft Connect 2018». Блог разработчиков Windows . Microsoft. Архивировано из оригинала 15 декабря 2018 г. Получено 24 декабря 2018 г.
  17. ^ rpetrusha. "Compiling Apps with .NET Native". Microsoft Learn . Архивировано из оригинала 3 декабря 2017 г. Получено 2 декабря 2017 г.
  18. ^ "Base Class Libraries Community". Microsoft . Архивировано из оригинала 24 апреля 2009 г. Получено 1 июня 2008 г.
  19. ^ ".NET Platform Standard". GitHub . Архивировано из оригинала 19 мая 2016 г. Получено 23 апреля 2016 г.
  20. ^ "Обновление ASP.NET Core 1.0 RC2". Скотт Хансельман . 14 апреля 2016 г. Архивировано из оригинала 19 апреля 2016 г. Получено 23 апреля 2016 г.
  21. ^ "NuGet Gallery – Home". nuget.org . Архивировано из оригинала 21 февраля 2021 г. . Получено 21 февраля 2021 г. .
  22. Смешанные (собственные и управляемые) сборки. Архивировано 22 октября 2014 г. на Wayback Machine , MSDN.
  23. ^ "Scott Guthrie: Silverlight and the Cross-Platform CLR". Channel 9. 30 апреля 2007 г. Архивировано из оригинала 22 мая 2015 г. Получено 16 апреля 2016 г.
  24. ^ "ECMA 335 – Стандарт ECMA-335 Common Language Infrastructure (CLI) 4-е издание (июнь 2006 г.)". ECMA. 1 июня 2006 г. Архивировано из оригинала 14 июня 2008 г. Получено 1 июня 2008 г.
  25. ^ "ISO/IEC 23271:2006". Стандарты ISO. 29 сентября 2006 г. Архивировано из оригинала 1 июля 2018 г. Получено 17 апреля 2012 г.
  26. ^ "Технический отчет TR/84 Common Language Infrastructure (CLI) – Информация, полученная из XML-файла раздела IV". ECMA. 1 июня 2006 г. Архивировано из оригинала 7 марта 2015 г. Получено 16 апреля 2016 г.
  27. ^ "Стандартная спецификация языка C++/CLI ECMA-372". ECMA. 1 декабря 2005 г. Архивировано из оригинала 10 августа 2008 г. Получено 16 января 2008 г.
  28. ^ ".NET становится кроссплатформенным с .NET Core". Архивировано из оригинала 19 февраля 2024 г. Получено 19 февраля 2024 г.
  29. ^ Gartner, Inc., как сообщается в «Hype Cycle for Cyberthreats, 2006», сентябрь 2006 г., Нил Макдональд; Амрит Уильямс и др.
  30. ^ Cifuentes, Cristina (июль 1994). "6: Анализ потока управления" (PDF) . Методы обратной компиляции (диссертация). Технологический университет Квинсленда . Архивировано из оригинала (PDF) 22 ноября 2016 г.
  31. ^ abc "Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework". Архивировано из оригинала 3 июля 2007 г. Получено 1 июня 2008 г.
  32. ^ abc "Сборка мусора в .NET". Архивировано из оригинала 25 мая 2008 г. Получено 1 июня 2008 г.
  33. ^ «В .NET Framework 4.5 включены новые усовершенствования сборщика мусора для клиентских и серверных приложений». 20 июля 2012 г. Архивировано из оригинала 4 февраля 2016 г. Получено 2 октября 2015 г.
  34. ^ abcd "Garbage Collection—Part 2: Automatic Memory Management in the Microsoft .NET Framework". Архивировано из оригинала 26 июня 2007 г. Получено 1 июня 2008 г.
  35. ^ «Понимание .NET Just-In-Time Compilation». telerik.com . 28 мая 2013 г. Архивировано из оригинала 11 июня 2013 г. Получено 21 мая 2015 г.
  36. ^ ab Компиляция MSIL в машинный код Архивировано 19 апреля 2015 г. на Wayback Machine , MSDN, Microsoft
  37. ^ "Понимание сборки мусора в .NET". 17 июня 2009 г. Архивировано из оригинала 10 октября 2019 г. Получено 13 ноября 2019 г.
  38. ^ "Release Notes Mono 2.2 – Mono". mono-project.com . Архивировано из оригинала 22 ноября 2016 г. Получено 22 ноября 2016 г.
  39. ^ de Icaza, Miguel (3 ноября 2008 г.). «Поддержка SIMD в Mono: делаем Mono безопасным для игр». Tirania.org. Архивировано из оригинала 4 ноября 2010 г. Получено 17 апреля 2012 г.
  40. ^ de Icaza, Miguel (3 ноября 2008 г.). «Поддержка SIMD в Mono: делаем Mono безопасным для игр». tirania.org . Архивировано из оригинала 2 июля 2022 г. . Получено 6 мая 2022 г. .
  41. ^ "SIMD-ускоренные типы в .NET". Microsoft Learn . Архивировано из оригинала 6 мая 2022 г. Получено 6 мая 2022 г.
  42. ^ ISO 9001:2008, Предисловие
  43. ^ Фейрберн, Кристофер (1 апреля 2008 г.). «Использование VB.NET с .NET Micro Framework «/dev/mobile». /dev/mobile . Архивировано из оригинала 27 февраля 2018 г. . Получено 17 апреля 2012 г. .
  44. ^ "CrossNet". Codeplex.com. Архивировано из оригинала 25 января 2010 г. Получено 17 апреля 2012 г.
  45. ^ "Microsoft .NET Framework Redistributable EULA". MSDN . Microsoft . 13 сентября 2006 г. Архивировано из оригинала 2 апреля 2015 г. Получено 28 февраля 2015 г.
  46. ^ Брей, Брэндон (15 августа 2012 г.). «Объявление о выпуске .NET Framework 4.5 RTM – Продукт и исходный код». Блог .NET Framework . Microsoft . Архивировано из оригинала 4 октября 2016 г. . Получено 18 августа 2016 г. .
  47. ^ "Announcing .NET 2015 Preview: A New Era for .NET". .NET Framework Blog . Microsoft . 12 ноября 2014 г. Архивировано из оригинала 19 августа 2016 г. Получено 18 августа 2016 г.
  48. ^ ".NET Core 5". dotnetfoundation.org . .NET Foundation. Архивировано из оригинала 17 февраля 2015 г. Получено 17 февраля 2015 г.
  49. ^ ".NET Micro Framework". dotnetfoundation.org . .NET Foundation. Архивировано из оригинала 17 февраля 2015 г. Получено 17 февраля 2015 г.
  50. ^ "Roslyn License". GitHub . .NET Foundation. 5 февраля 2020 г. Архивировано из оригинала 24 марта 2018 г. Получено 14 апреля 2018 г.
  51. ^ "ASP.NET MVC, Web API и Web Pages (Razor)". dotnetfoundation.org . .NET Foundation. Архивировано из оригинала 17 февраля 2015 г. Получено 17 февраля 2015 г.
  52. ^ "ASP.NET Core License". GitHub . .NET Foundation. 5 июля 2017 г. Архивировано из оригинала 21 февраля 2021 г. Получено 14 апреля 2018 г.
  53. ^ "ASP.NET Ajax Control Toolkit". dotnetfoundation.org . .NET Foundation. Архивировано из оригинала 17 февраля 2015 г. Получено 17 февраля 2015 г.
  54. ^ "ASP.NET SignalR". dotnetfoundation.org . .NET Foundation. Архивировано из оригинала 17 февраля 2015 г. Получено 17 февраля 2015 г.
  55. ^ "Entity Framework". dotnetfoundation.org . .NET Foundation. Архивировано из оригинала 18 апреля 2016 года . Получено 16 апреля 2016 года .
  56. ^ "NuGet". dotnetfoundation.org . .NET Foundation. Архивировано из оригинала 17 февраля 2015 г. Получено 17 февраля 2015 г.

Внешние ссылки