Net native framework что это

Обновлено: 05.07.2024

С точки зрения разработчика ОС Windows - это в первую очередь набор базовых функций Win API, реализованных в виде DLL. До 1993 г. в Windows основной моделью создания многокомпонентных приложений было именно использование вспомогательных модулей поддержки в виде DLL (в свое время пришедших на смену классическому варианту, предполагающему создание единого исполняемого модуля путем включения в него процедур из двоичных LIB-библиотек). В 1993 г. Microsoft предложила новую модель многокомпонентных приложений - COM (Common Object Model). По большому счету, главная идея здесь состоит в применении в дополнение к исполняемому коду метаданных, обеспечивающих автоматический контроль за передачей параметров (а также унификация форматов параметров).

Конечно, можно говорить о достоинствах COM по сравнению с традиционными DLL (хотя достоинства всегда сопровождаются и недостатками, в данном случае в виде снижения производительности), но я категорически не согласен с высказываниями некоторых авторов, смысл которых сводится к следующему: "После выхода COM разработчики поняли, что им больше не надо писать весь код приложений с нуля". Если вдуматься, использование готовых компонентов - ключевая технология программирования на протяжении всей истории этого вида деятельности.

Структура и логика работы

Собственно, с точки зрения разработки приложений именно в этом заключается новизна (но лишь относительная, для Windows-программирования) данного решения: вспомогательные функции отделены от бизнес-логики приложений, реализуемой с помощью конкретных языков. Кроме очевидного преимущества такой унификации функций (зачем писать отдельные функции, вычисляющие синус, для разных языков?), это создает хорошие предпосылки для улучшения управления оперативной памятью. Ведь, как известно, огромное число проблем надежности программ связано с использованием разных механизмов динамического распределения пространства в различных языках.

Common Language Runtime

Однако, в отличие от Java, CLR будет выполнять код не в режиме классического интерпретатора, а путем предварительной компиляции в машинный код отдельных фрагментов программы или целого приложения (рис. 2). Первый вариант - основной, при этом применяется так называемый Just-In-Time компилятор, который выполняет преобразование MSIL в машинный код по мере обращения к соответствующим процедурам (т. е. неиспользуемые фрагменты программы вовсе не компилируются). Данный подход также хорошо известен; он, в частности, уже более шести лет используется в платформе "1С:Предприятие".

Как известно, режим интерпретации имеет два главных преимущества по сравнению с использованием машинного кода: повышение безопасности программ (точнее, защищенности системы в целом от действия конкретных программ) и упрощение адаптации программ к конкретной аппаратной платформе. С учетом этого рассмотрим структуру CLR-модулей.

CLR-модули состоят из исполняемого кода и метаданных. Метаданные (например, различные декларации полей, методов, свойств и событий) широко применяются и в COM-технологии, что и составляет ее основное отличие от обычных двоичных DLL. В CLR состав метаданных значительно расширен, что позволяет более эффективно контролировать версии, проверять надежность источников поступления программ и т. п.

Исполняемый код в основном представлен в виде "управляемого кода" (возможны и фрагменты "неуправляемого кода", но они будут отныне большой редкостью). Это означает, что CLR не просто преобразует MSIL в машинные инструкции, а выполняет эти действия с учетом определенных внешних установок. Например, Модуль1 может задать свой собственный набор прав, предоставляемый вызываемому им Модулю2, запретив, в частности, любые операции изменения файлов.

Эта возможность широко используется в многопользовательской Интернет-игре для программистов "Террариум", анонсированной на форуме PDC 2001. В ней каждый может написать программные модули, реализующие выбранные стратегии, которые другие участники загружают на свои компьютеры. Безопасность тут обеспечивается именно благодаря четкому контролю за допустимыми действиями "инородных тел". В общем, в CLR мы видим реализацию идей Интернет-браузеров, которые представляют промежуточную среду выполнения программ, но только со значительно более высоким уровнем управляемости прав.

Во-первых, реализована иерархическая система имен объектов типа, получившая название "пространство имен". Теперь вместо плоского идентификатора "ИмяПриложения.ИмяКласса" можно использовать "ИмяПриложения.Имя1.Имя2. ИмяКласса".

Во-вторых, изменен порядок регистрации объектов, что непосредственно связано с появлением еще одного нового термина - сборка (Assembly).

Пример взаимодействия компонентов

В целом эта манипуляция ничем не отличается от создания COM-объекта в VB 6.0, за исключением лишь синтаксиса операции возврата значения функции (раньше мы бы просто написали NowTime = Now).

Посмотрим теперь на структуру проекта в окне Solution Explorer (рис. 3). Отметим, что физически наш проект называется ClassLibrary3, а логическое имя библиотеки - MyClassLibrary (смысл этих компонентов прояснится в дальнейшем). Помимо модуля класса, здесь в явном виде описаны три ссылки на базовые классы, подключенные к проекту по умолчанию. Впрочем, на самом деле подключенных классов гораздо больше (например, в их число входят все классы библиотеки Microsoft.Visual Basic). Здесь же виден новый модуль с описанием данной сборки AssemblyInfo.vb, содержимое которого можно не только посмотреть, но и отредактировать (рис. 4). Кроме того, видно, что к проекту были автоматически подключены еще два базовых класса (см. ключевое слово Imports) и что данную библиотеку можно зарегистрировать и в качестве COM-объекта - тут прописан ее GUID.

Рис. 3. Структура проекта ClassLibrary.

Рис. 4. Описание сборки проекта.

Теперь создадим DLL и посмотрим каталог ClassLibrary3, куда записаны файлы проекта (рис. 5). Результирующий файл ClassLibrary3.dll находится в подкаталоге BIN, а в OBJ - еще несколько копий этой же DLL, полученных в результате отладки.

Рис. 5. Состав файлов проекта.

Для отладки сервера создадим клиентскую программу в виде Console Application, в которой с помощью сформированного ранее компонента попробуем получить текущее время. Для этого откроем окно Add Reference и с помощью кнопки Browse подключим к проекту библиотеку ClassLibrary3.dll (рис. 6). Введем такой код:

Запустим его на выполнение и убедимся, что все работает, как задумано. По крайней мере, внешне все не отличается от того, как мы раньше работали с COM-объектами (только все теперь делается заметно медленнее). Но отметим один любопытный момент. Опять откроем проект ClassLibrary3 и заменим в нем старый код на такой вариант:

Откомпилируем его, полностью заменив старую DLL. Но если мы сейчас зайдем в каталог ConsoleApplication2\Bin, где хранится созданный ранее исполняемый файл клиентского проекта, и запустим его на выполнение, то он будет работать без проблем в старом варианте. Почему? Да потому, что в этом же каталоге вы обнаружите предыдущий вариант ClassLibrary3.dll, которая была автоматически переписана при подключении соответствующей ссылки.

Становится понятен смысл операторных скобок Namespace, использованных в коде класса, - с их помощью описывается иерархическая система имен объектов. Подправим этот код, чтобы можно было применять более компактное обращение к именам объектов:

Теперь "сухой остаток": что же нового мы увидели на этом простом примере по сравнению с традиционным использованием COM-объектов?

Во-первых, проблема согласования версий применяемых компонентов решается тривиальным копированием нужных файлов в каталог клиентского приложения (в том числе с помощью создания специальной копии COM-библиотек). Во-вторых, с помощью операторных скобок Namespace мы можем создавать иерархическую систему имен объектов в отличие от двухзвенной DllName.ClassName, принятой в COM, которая теперь является частным случаем.

Покажем детальнее, как создать такую систему имен, на примере проекта типа Class Library и имени ClassLibraryN:

Соответственно, в клиентском приложении используемые нами классы будут описаны следующим образом:

Обратите внимание, что тут мы специально использовали одинаковое имя Class1 для разных объектов (находящихся в зоне действия разных пространств имен).

Конечно, эти новшества полезны, но я бы пока избегал использования эпитетов "революционные". К тому же нужно посмотреть, как это все работает в реальных проектах.

Хорошо забытое старое

Действительно, за разговорами о DLL, объектных библиотеках и сборках и прочем мы как-то подзабыли, что проблема повторного использования программных компонентов и их унификация возникла не 10 лет назад. Именно для решения этой задачи еще лет 40 назад была реализована идея разделения процедур компиляции (трансляция исходных модулей в объектные) и компоновки (объединения объектных модулей в один загрузочный), которая подразумевала, в частности, что для создания одной программы можно применять разные языки программирования, в том числе с использованием единых библиотек подпрограмм.

При этом еще во времена MS-DOS широко применялась технология, позволявшая либо выделить вспомогательные функции приложения в виде автономного модуля поддержки (полного аналога нынешних DLL), либо включить их в состав единого исполняемого файла. И никакого DLL Hell!

Конечно, такие параллели весьма условны, но все же остается некоторое чувство беспокойства: почему реализация в общем-то достаточно простых идей влечет за собой столь быстрый рост требований к аппаратным ресурсам? Может быть, для того, чтобы поэффективнее загрузить дополнительные вычислительные мощности, которые постоянно появляются в результате действия закона Мура?

Другие статьи из раздела

С 26 по 29 октября 2010 года состоялась 21-ая ежегодная выставка информационных и коммуникационных технологий Softool

ООО «ИТ-экспо»
С 26 по 29 октября 2010 года состоялась 21-ая ежегодная выставка информационных и коммуникационных технологий Softool
Выставка прошла при поддержке Российской академии наук, Министерство связи и массовых коммуникаций Российской Федерации, Правительства Москвы …

День открытых дверей в дата-центре DataLine

DataLine
День открытых дверей в дата-центре DataLine
27 октября 2010 г. компания DataLine совместно с агентством Cnews провели День Открытых дверей в центре обработки данных на улице Боровой дом 7 …

OKI Data Corporation объявляет о начале работы ООО «ОКИ Системс Рус»

OKI Data Corporation
OKI Data Corporation объявляет о начале работы ООО «ОКИ Системс Рус»
Компания OKI Data Corporation, один из лидеров в разработке технологических решений для печати, объявила об официальном начале работы российской …

RAID-контроллеры Adaptec Series 5Z с безбатарейной защитой кэша

Adaptec by PMC
RAID-контроллеры Adaptec Series 5Z с безбатарейной защитой кэша
Опытные сетевые администраторы знают, что задействование в работе кэш-памяти RAID-контроллера дает серьезные преимущества в производительности …

Трехфазный ИБП Chloride от 200 до 1200 кВт: Trinergy

Chloride
Трехфазный ИБП Chloride от 200 до 1200 кВт: Trinergy
Trinergy — новое решение на рынке ИБП, впервые с динамическим режимом работы, масштабируемостью до 9.6 МВт и КПД до 99%. Уникальное сочетание …

30 ноября 2021 г. | Он-лайн формат
Dell Technologies Forum 2021

Почему так происходит? Что это такое и зачем нужен NET Framework ?

Наверное, вы знаете, что основное занятие программистов — написание кода. При этом они используют различные языки программирования, позволяющие сказать компьютеру, что он должен делать:

Microsoft NET Framework - что это такое?

Но есть одна проблема — языки программирования довольно примитивны. С их помощью можно легко выполнять простые действия вроде сложения и умножения. А всё остальное требует долгой и усердной работы. Хотите вывести текст или изображения на экран? Тогда придётся написать много кода, используя самые простые элементы языка.

Microsoft NET Framework - что это такое? - 2

Как установить Microsoft NET Framework

На момент написания статьи самая свежая версия — Microsoft NET Framework 4,7 . Именно её мы и будем устанавливать:

Как установить Microsoft NET Framework

Microsoft Net Framework можно установить и через Центр обновления Windows . Но многие отключают обновление Windows , поэтому данный метод будет предпочтительнее.

Перед установкой — Microsoft Net Framework можно установить на Windows 10 , Windows 8.1 и Windows 7 SP1 как на 32-битные, так и на 64-битные системы. Чтобы установка прошла без ошибок, Microsoft рекомендует иметь на жестком диске минимум 2.5 ГБ свободного пространства.

Microsoft предлагает два вида установщиков: веб-установщик и автономный установщик. Веб-установщик весит меньше 2 МБ, и скачивает все необходимые компоненты во время инсталляции. Поэтому вам потребуется стабильное соединение с интернетом.

Автономный установщик весит около 60 МБ, и не требует доступа к интернету во время инсталляции.

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

Как установить Microsoft NET Framework - 2

Обратите внимание, что версия 4.7 — это выполняемое обновление версий 4 , 4.5 , 4.5.1 , 4.5.2 , 4.6 , 4.6.1 и 4.6.2 . Поэтому не удаляйте предыдущие версии после установки. NET Framework 3.5 SP1 и более старые версии устанавливаются отдельно.

По умолчанию NET Framework инсталлирует английскую версию независимо от того, какой вы используете установщик. Для локализации нужно скачать соответствующий языковой пакет. На данный момент языковые пакеты для версии 4.7 доступны только в виде автономных установщиков.

Ещё кое-что о Microsoft Net Framework

Еще одна причина, зачем нужен NET Framework . Несколько лет назад Microsoft открыла исходный код NET Framework , позволив всем желающим вносить свой вклад в разработку платформы. В результате Microsoft стала самой активной организацией на GitHub .

Дайте знать, что вы думаете по данной теме в комментариях. Мы очень благодарим вас за ваши комментарии, лайки, отклики, дизлайки, подписки!

Пожалуйста, оставьте ваши отзывы по текущей теме материала. За комментарии, дизлайки, подписки, лайки, отклики огромное вам спасибо!

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое IIS и что такое PWS? Почему одно без другого не работает?
вот уже второй день пытаюсь немного разобраться в АСП. накидал небольшую тестовую страничку. но с.

Что такое напряжение и что такое сила тока с позиции заряженных частиц
Объясните пожалуйста, что такое напряжение и что такое сила тока с позиции заряженных частиц.

The Native Image Generator (Ngen.exe) is a tool that improves the performance of managed applications. Ngen.exe creates native images, which are files containing compiled processor-specific machine code, and installs them into the native image cache on the local computer. The runtime can use native images from the cache instead of using the just-in-time (JIT) compiler to compile the original assembly. А чем они настолько выдаюшиеся, что привязываются к конкретному компу? Ведь если это некий native в классическом смысле, то идёт привязка разве что к версии винды + разрядности? Т.е. теоретически, "native" сделанный из NET должен бы запускаться на идентичной машине в плане версии фреймворка, разрядности, и версии операционки? Tulosba, это тоже ясно.
Тогда такой вопрос:
Код - чисто NET без дополнительных библиотек, без всяких winapi и прочей аддонщины.
1 машина - NET 3,5__W7x64
2 машина - NET 3,5__W7x64
Сгенерировали на первой машине "native" с помощью ngen
Скопировали на вторую машину - код работает.
Утверждение верно? да нее))) просто хочу выяснить что из себя представляет "платформозависимость" после ngen. Чем она обусловлена. skilllab, я по факту с ngen дел не имел. Но судя по описанию, на Ваш вопрос: Тогда такой вопрос:
Код - чисто NET без дополнительных библиотек, без всяких winapi и прочей аддонщины.
1 машина - NET 3,5__W7x64
2 машина - NET 3,5__W7x64
Сгенерировали на первой машине "native" с помощью ngen
Скопировали на вторую машину - код работает.
Утверждение верно?

Нет.
Нативный образ привязывается к конкретной системе, потому прекомпилированный образ распространять не получится.

Но никто не запрещает генерировать образы на конкретной системе во время установки приложения.
Разве что права администратора потребуются.

Чем? Что в нём такого особенного, что зависит от конкретной системы? И тем более вопрос: зачем нативному. (по заявлению microsoft) коду какая-то привязка?

skilllab, К процессору , ОС-е например.

зачем нативному. (по заявлению microsoft) коду какая-то привязка?

Это позволяет коду выполнятся быстрее и в некоторых случаях выполняться вообще.

Native - родной код полученный на определенной ОС с определенным хардом)

Чем? Что в нём такого особенного, что зависит от конкретной системы? зачем нативному. (по заявлению microsoft) коду какая-то привязка? Нативный — это значит содержащий машинные инструкции, которые может выполнять ЦП под управлением текущей ОС без какого-либо посредника.
Что никак не отменяет возможность зависимости этих инструкций от внешних модулей (см. динамические библиотеки под нативный C/C++). images from the cache instead of using the just-in-time (JIT)

Что исключает использование промежуточной компиляции.

Под словом native я подразумевал НЕуправляемый код. Тоже самое подразумевают тысячи программистов))) Судя логике микрософта: из NET в IL в mashine = native. Native - родной для процессора. Если же этот нетовский native зависит даже не от процессора а от каких то там групповых политик винды - это не native.

Неуправляемый код компилируется для конкретного процессора и при вызове просто исполняется.
В управляемой среде компиляция производится в 2 этапа:

))))
Калькулятор в котором запрещено вводить точки (когда региональный стандарт это позволяет) как разделение целой и дробной - просто не запустится на вашей винде и вообще её может обрушить (извините уж за столь утрированную форму) Да, смена определенной политики безопасности может похерить ваш нативный образ, если код в нем зависит от этой политики.

Могли бы Вы привести пример? Не очень понятно, что должно произойти: код не запустится вообще, или отвалится при попытке сделать что-то запрещенное?

Вообще, вот вырезка из той же страницы от MS:

The following changes to a computer's settings and environment cause native images to become invalid:

The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

For example, if the version of the operating system running on a computer changes from Windows 98 to Windows XP, all native images stored in the native image cache become invalid. However, if the operating system changes from Windows 2000 to Windows XP, the images are not invalidated.

The exact identity of the assembly.

If you recompile an assembly, the assembly's corresponding native image becomes invalid.

The exact identity of any assemblies the assembly references.

If you update a managed assembly, all native images that directly or indirectly depend on that assembly become invalid and need to be regenerated. This includes both ordinary references and hard-bound dependencies. Whenever a software update is applied, the installation program should execute an Ngen Update command to ensure that all dependent native images are regenerated.

Security factors.

Changing machine security policy to restrict permissions previously granted to an assembly can cause a previously compiled native image for that assembly to become invalid.

С версиями фреймворка и ОС понятно. А вот как проверяется идентичность? Т.е. есть, скажем, исходный .exe (c IL внутри), и для него сгенерирован native .exe, который помещается, как я понял, в некий native image cache. Что должен сделать пользователь, чтобы запустился (или не запустился) native .exe?


  • Open source и ориентированность на сообщество GitHub.
  • Кроссплатформенная реализация.
  • Поддержка использования специфических платформозависимых возможностей, таких как Windows Forms и WPF под Windows, а также нативных привязок (bindings) к каждой нативной платформе из Xamarin.
  • Высокая производительность.
  • Side-by-side инсталляция.
  • Маленький размер файлов проектов (SDK-стиль).
  • Интерфейс командной строки (CLI) с широкими возможностями.
  • Интеграция с Visual Studio, Visual Studio for Mac и Visual Studio Code.


Исполняющие среды

Высокая производительность и продуктивность

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

Инструменты разработчиков — ещё одна сфера, в которой JIT прекрасно себя зарекомендовала, например, dotnet watch или режим “edit and continue”. Для работы инструментов часто требуется многократно компилировать и загружать код в одном и том же процессе без перезапуска, и делать это нужно очень быстро.

Быстрый запуск, низкое потребление ресурсов процессора (footprint) и уменьшение потребления памяти

Есть два типа AOT-решений:

  • Требующие полной AOT-компиляции.
  • Решения, большая часть кода которых AOT-скомпилирована, но всё же позволяющие использовать JIT или интерпретатор для таких паттернов кода, которые не дружат с AOT (например, дженерики).

AOT-компиляция останется необходимой для iOS, WebAssembly и некоторых игровых приставок. Мы сделаем её опциональной для приложений, которые встраиваются в технику (appliance-like), для которых требуется быстрый запуск и/или низкое потребление ресурсов процессора.

Основы и схожие требования

Для нас критически важно продолжать развиваться как платформа со средствами управления запуском, производительностью, потреблением памяти, надёжностью и диагностики. В то же время целесообразно сосредоточить наши усилия. Мы станем больше работать над повышением производительности и надежности в CoreCLR, а также над улучшением запуска и снижением размера файлов компиляторе Mono AOT. Нам это кажется хорошим сочетанием. Производительность и надежность идут рука об руку, как и скорость запуска со снижением размера файлов.

В улучшение одних характеристик целесообразно вкладывать разные ресурсы, а в улучшение других — нет.

Рождение проекта

Теперь мы двигаем проект как единая команда. С декабря мы далеко продвинулись в нескольких проектах:

Заключение

Читайте также: