Фреймворк net что это

Обеспечение согласованной объектно-ориентированной среды программирования для локального сохранения и выполнения объектного кода, для локального выполнения кода, распределенного в Интернете, либо для удаленного выполнения.

Предоставление среды выполнения кода, в которой:

сведена к минимуму вероятность конфликтов в процессе развертывания программного обеспечения и управления его версиями;

гарантируется безопасное выполнение кода, включая код, созданный неизвестным или не полностью доверенным сторонним изготовителем;

исключаются проблемы с производительностью сред выполнения скриптов или интерпретируемого кода;

обеспечиваются единые принципы разработки для разных типов приложений, таких как приложения Windows и веб-приложения;

Например, ASP.NET размещает среду выполнения и обеспечивает масштабируемую среду для управляемого кода на стороне сервера. ASP.NET работает непосредственно со средой выполнения, чтобы обеспечить выполнение приложений ASP.NET и веб-служб XML, обсуждаемых ниже в этой статье.

Обозреватель Internet Explorer может служить примером неуправляемого приложения, размещающего среду выполнения (в виде расширений типов MIME). Размещение среды выполнения в обозревателе Internet Explorer позволяет внедрять управляемые компоненты или элементы управления Windows Forms в HTML-документы. Такое размещение среды позволяет выполнять управляемый мобильный код и пользоваться его существенными преимуществами, в частности выполнением в условиях неполного доверия и изолированным хранением файлов.

На следующем рисунке демонстрируется взаимосвязь среды CLR и библиотеки классов с пользовательскими приложениями и всей системой. На рисунке также показано, как управляемый код работает в пределах более широкой архитектуры.

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что это

Возможности среды CLR

Среда CLR управляет памятью, выполнением потоков, выполнением кода, проверкой безопасности кода, компиляцией и другими системными службами. Эти средства являются внутренними для управляемого кода, который выполняется в среде CLR.

По соображениям безопасности управляемым компонентам присваиваются разные степени доверия, зависящие от ряда факторов, в число которых входит их происхождение (например, Интернет, сеть предприятия или локальный компьютер). Это означает, что управляемый компонент может или не может выполнять операции доступа к файлам, операции доступа к реестру или другие важные функции, даже если он используется в одном и том же активном приложении.

Кроме того, управляемая среда выполнения исключает многие часто возникающие проблемы с программным обеспечением. Например, среда выполнения автоматически управляет размещением объектов и ссылками на объекты, освобождая их, когда они больше не используются. Автоматическое управление памятью исключает две наиболее часто возникающие ошибки приложений: утечки памяти и недействительные ссылки на память.

Хотя среда выполнения разрабатывалась для будущего программного обеспечения, она также поддерживает сегодняшнее и вчерашнее программное обеспечение. Взаимодействие управляемого и неуправляемого кодов позволяет разработчикам использовать необходимые компоненты COM и библиотеки DLL.

Среда выполнения разработана для повышения производительности. Хотя общеязыковая среда выполнения предоставляет многие стандартные службы времени выполнения, управляемый код никогда не интерпретируется. Средство компиляции по требованию (JIT) позволяет выполнять весь управляемый код на машинном языке компьютера, где он запускается. Между тем диспетчер памяти устраняет возможность фрагментации памяти и увеличивает объем адресуемой памяти для дополнительного повышения производительности.

Наконец, среда выполнения может размещаться в высокопроизводительных серверных приложениях, таких как Microsoft SQL Server и службы IIS (Internet Information Services). Такая инфраструктура позволяет использовать управляемый код для написания собственной логики программ, пользуясь при этом высочайшей производительностью лучших производственных серверов, которые поддерживают размещение среды выполнения.

Приложения с графическим интерфейсом Windows (Windows Forms). См. статью Windows Forms.

Приложения Windows Presentation Foundation (WPF). См. статью Windows Presentation Foundation.

Сервисноориентированные приложения, использующие Windows Communication Foundation (WCF). См. статью Разработка сервисноориентированных приложений с помощью WCF.

Приложения, поддерживающие бизнес-процессы Windows Workflow Foundation (WF). См. Windows Workflow Foundation.

Источник

.NET — это бесплатная платформа разработки с открытым исходным кодом для создания различных типов приложений, таких как следующие:

Для совместного использования функциональных возможностей различных приложений и типов приложений используются библиотеки классов.

Кроссплатформенные

Поддерживаемые архитектуры процессоров:

.NET позволяет использовать специальные возможности платформы, такие как API операционной системы. Примерами являются Windows Forms и WPF в Windows и собственные привязки к каждой мобильной платформе из Xamarin.

Открытый исходный код

Поддержка

Инструменты и производительность

.NET предоставляет возможность выбора языков, интегрированных сред разработки (IDE) и других средств.

Языки программирования

C# (произносится как «си шарп») — современный объектно-ориентированный и типобезопасный язык программирования. C# относится к широко известному семейству языков C, и покажется хорошо знакомым любому, кто работал с C, C++, Java или JavaScript.

Язык F# поддерживает функциональные, объектно-ориентированные и императивные модели программирования.

Интегрированные среды разработки

Онлайн-среда Visual Studio Code, которая в настоящее время доступна в виде бета-версии.

Пакет SDK и среды выполнения

Загружаемый пакет SDK содержит следующие компоненты.

Загружаемая среда выполнения содержит следующие компоненты.

Дополнительные сведения см. в следующих ресурсах:

Система проектов и MSBuild

И вот один для веб-приложения:

NuGet

Дополнительные сведения см. в документации NuGet.

.NET Interactive — это группа средств и интерфейсов командной строки, которые позволяют пользователям создавать интерактивные возможности в веб-приложениях, разметке и записных книжках.

Дополнительные сведения см. в следующих ресурсах:

Модели выполнения.

.NET CLR — это кроссплатформенная среда выполнения, которая включает поддержку Windows, macOS и Linux. Среда CLR обрабатывает выделение памяти и управление ей. Среда CLR также является виртуальной машиной, которая не только выполняет приложения, но и создает, а также компилирует код с помощью JIT-компилятора.

Для получения дополнительной информации см. Common Language Runtime.

JIT-компилятор и промежуточный язык

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

Компилятор AOT

Автоматическое управление памятью

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

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

Дополнительные сведения о сборке мусора см. в статьях Автоматическое управление памятью и Основы сборки мусора.

Работа с неуправляемыми ресурсами

Дополнительные сведения см. в разделе Очистка неуправляемых ресурсов.

Модели развертывания

Можно установить несколько версий среды выполнения параллельно, чтобы запускать зависящие от платформы приложения, предназначенные для разных версий среды выполнения. Дополнительные сведения см. в разделе Целевые платформы.

Исполняемые файлы создаются для конкретных целевых платформ, которые указываются с помощью идентификатора среды выполнения (RID).

Библиотеки среды выполнения.

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

Расширения библиотек среды выполнения

Библиотеки для некоторых часто используемых функциональных возможностей приложения не включены в библиотеки среды выполнения, но доступны в пакетах NuGet, как показано ниже.

Пакет NuGetДокументация
Microsoft.Extensions.HostingУправление жизненным циклом приложения (универсальный узел)
Microsoft.Extensions.DependencyInjectionВнедрение зависимостей
Microsoft.Extensions.ConfigurationКонфигурация
Microsoft.Extensions.LoggingLogging
Microsoft.Extensions.OptionsШаблон параметров

Доступ к данным

.NET предоставляет объектно-реляционный модуль сопоставления (ORM) и способ написания SQL-запросов в коде.

Entity Framework Core

LINQ позволяет писать декларативный код для работы с данными. Данные могут быть представлены разными формами (например, объектами в памяти, содержимым базы данных SQL или XML-документом), но обычно создаваемый код LINQ не отличается для каждого из источников данных.

Уточнение терминологии

Среда выполнения

платформа

Пакет SDK

platform

Сложные сценарии

Взаимодействие на уровне машинного кода

Основным способом осуществления взаимодействия с собственными API является «вызов неуправляемого кода» или сокращенно P/Invoke. P/Invoke поддерживается на платформах Linux и Windows. Способ, который подходит только для Windows, называется «COM-взаимодействием» и используется для работы с COM-компонентами в управляемом коде. Он основан на инфраструктуре P/Invoke, но работает иначе.

Небезопасный код

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

Источник

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

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

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что это

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

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что это

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

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что это

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

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

.NET Framework 4.7 Веб-установщик

.NET Framework 4.7 Автономный установщик

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что это

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

Перейдя по ссылке, приведенной ниже, выберите необходимый язык, дождитесь, пока страница перезагрузится, и нажмите « Скачать ».

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

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

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

Источник

Provide a consistent, object-oriented programming environment whether object code is stored and executed locally, executed locally but web-distributed, or executed remotely.

Provide a code-execution environment that:

Minimizes software deployment and versioning conflicts.

Promotes safe execution of code, including code created by an unknown or semi-trusted third party.

Eliminates the performance problems of scripted or interpreted environments.

Make the developer experience consistent across widely varying types of apps, such as Windows-based apps and Web-based apps.

For example, ASP.NET hosts the runtime to provide a scalable, server-side environment for managed code. ASP.NET works directly with the runtime to enable ASP.NET apps and XML web services, both of which are discussed later in this article.

Internet Explorer is an example of an unmanaged app that hosts the runtime (in the form of a MIME type extension). Using Internet Explorer to host the runtime enables you to embed managed components or Windows Forms controls in HTML documents. Hosting the runtime in this way makes managed mobile code possible, but with significant improvements that only managed code offers, such as semi-trusted execution and isolated file storage.

The following illustration shows the relationship of the common language runtime and the class library to your apps and to the overall system. The illustration also shows how managed code operates within a larger architecture.

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что это

Features of the common language runtime

The common language runtime manages memory, thread execution, code execution, code safety verification, compilation, and other system services. These features are intrinsic to the managed code that runs on the common language runtime.

Regarding security, managed components are awarded varying degrees of trust, depending on a number of factors that include their origin (such as the Internet, enterprise network, or local computer). This means that a managed component might or might not be able to perform file-access operations, registry-access operations, or other sensitive functions, even if it’s used in the same active app.

The runtime also enforces code robustness by implementing a strict type-and-code-verification infrastructure called the common type system (CTS). The CTS ensures that all managed code is self-describing. The various Microsoft and third-party language compilers generate managed code that conforms to the CTS. This means that managed code can consume other managed types and instances, while strictly enforcing type fidelity and type safety.

In addition, the managed environment of the runtime eliminates many common software issues. For example, the runtime automatically handles object layout and manages references to objects, releasing them when they are no longer being used. This automatic memory management resolves the two most common app errors, memory leaks and invalid memory references.

While the runtime is designed for the software of the future, it also supports software of today and yesterday. Interoperability between managed and unmanaged code enables developers to continue to use necessary COM components and DLLs.

The runtime is designed to enhance performance. Although the common language runtime provides many standard runtime services, managed code is never interpreted. A feature called just-in-time (JIT) compiling enables all managed code to run in the native machine language of the system on which it’s executing. Meanwhile, the memory manager removes the possibilities of fragmented memory and increases memory locality-of-reference to further increase performance.

Finally, the runtime can be hosted by high-performance, server-side apps, such as Microsoft SQL Server and Internet Information Services (IIS). This infrastructure enables you to use managed code to write your business logic, while still enjoying the superior performance of the industry’s best enterprise servers that support runtime hosting.

.NET Framework class library

Windows GUI apps (Windows Forms). See Windows Forms.

Windows Presentation Foundation (WPF) apps. See Windows Presentation Foundation.

Service-oriented apps using Windows Communication Foundation (WCF). See Service-Oriented Applications with WCF.

Workflow-enabled apps using Windows Workflow Foundation (WF). See Windows Workflow Foundation.

Источник

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что это

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

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

Common Language Runtime

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

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

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

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

Честно говоря, я пока не до конца понял, в чем качественное отличие этих двух типов объектов, по крайней мере, в рамках локального компьютера. Возможно, есть какие-то радикальные изменения в протоколах взаимодействия, но внешне.NET сейчас представляет собой лишь модернизированный вариант COM, пожалуй, лишь с двумя видимыми отличиями.

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

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

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

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что этоРис. 3. Структура проекта ClassLibrary.
Рис. 4. Описание сборки проекта.Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что это
Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что этоРис. 5. Состав файлов проекта.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что этоChloride
Демонстрация Chloride Trinergy
Впервые в России компания Chloride Rus провела демонстрацию системы бесперебойного электропитания Chloride Trinergy®, а также ИБП Chloride 80-NET™, NXC и NX для своих партнеров и заказчиков.

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что этоNEC Нева Коммуникационные Системы
Завершена реорганизация двух дочерних предприятий NEC Corporation в России
С 1 декабря 2010 года Генеральным директором ЗАО «NEC Нева Коммуникационные Системы» назначен Раймонд Армес, занимавший ранее пост Президента Shyam …

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что этокомпания «Гротек»
С 17 по 19 ноября 2010 в Москве, в КВЦ «Сокольники», состоялась VII Международная выставка InfoSecurity Russia. StorageExpo. Documation’2010.
Новейшие решения защиты информации, хранения данных и документооборота и защиты персональных данных представили 104 организации. 4 019 руководителей …

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что этоEmbarcadero
Возможности Delphi 2010
Посмотрите обзор среды разработки Delphi и оцените, как можно использовать данную технологию для быстрой разработки Windows-приложений. В это обзоре …

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что этоФОРС – Центр разработки
Алексей Лапиров, директор по продажам компании ФОРС – Центр разработки, рассказывает о том, как ИТ–технологии могут обеспечить развитие бизнеса даже в условиях ограниченного ИТ-бюджета
В текущей ситуации, когда акцент в работе IT-службы сместился с развития инфраструктуры на поддержание максимальной эффективности уже существующих …

Фреймворк net что это. Смотреть фото Фреймворк net что это. Смотреть картинку Фреймворк net что это. Картинка про Фреймворк net что это. Фото Фреймворк net что этоАкадемии АйТи
Отчетная пресс-конференция Академии АйТи: «Время эффективных решений»
27 августа в Академии АйТи состоялась он-лайн пресс-конференция «Время эффективных решений: ситуация на рынке дополнительного профессионального …

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *