Первая программа на C# (CSharp)

В этой статье мы займёмся подготовкой вашего рабочего окружения для разработки, разберёмся в сходствах и различиях между .NET 5, .NET Core, .NET Framework и .NET Standard, а затем создадим самое простое приложение на C# 9 и .NET 5 с использованием Microsoft Visual Studio Code.

Статья охватывает следующие темы:

  • Настройка вашего рабочего окружения для разработки.
  • Разбор основ .NET.
  • Создание консольных приложений с использованием Visual Studio Code.
  • Поиск помощи и ресурсов для дальнейшего обучения.

Давайте начнём с настройки вашего рабочего окружения. Это важный первый шаг, который позволит вам писать и запускать код. Visual Studio Code — это лёгкая, но мощная среда разработки, доступная для Windows, macOS и Linux. Если у вас ещё нет Visual Studio Code, его можно бесплатно скачать с официального сайта Microsoft.

После установки Visual Studio Code вам понадобится установить .NET 5 SDK. Это набор инструментов, который позволяет разрабатывать приложения на C# и .NET. Вы можете найти его на сайте Microsoft, следуя инструкциям для вашей операционной системы.

Когда ваше рабочее окружение будет готово, вы сможете создать первое консольное приложение. Консольное приложение — это простая программа, которая взаимодействует с пользователем через текстовый терминал. Это отличный способ начать изучение C#, потому что вы сразу увидите результаты своей работы.

Для создания и запуска вашего первого консольного приложения выполните следующие шаги в Visual Studio Code:

  1. Откройте Visual Studio Code.
  2. Создайте новый проект C# с помощью команды dotnet new console.
  3. Напишите небольшую программу на C#. Например, чтобы вывести «Привет, мир!» на экран, используйте следующий код:
    using System;
    
    namespace HelloWorld
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Привет, мир!");
            }
        }
    }
  4. Сохраните файл и запустите программу, используя команду dotnet run.

Поздравляю, вы только что создали и запустили своё первое приложение на C#!

Если вы столкнётесь с проблемами или вам нужна дополнительная помощь, не стесняйтесь использовать ресурсы, такие как Stack Overflow или официальные документы Microsoft. Также вы можете скачать готовый код решений для этой книги из GitHub-репозитория, указанного в тексте, чтобы сравнить свои результаты и улучшить понимание материала.

Не забывайте, что практика и повторение — ключи к успешному обучению. Продолжайте экспериментировать с кодом и изучать новые возможности C# и .NET!

Содержание

Настройка вашего рабочего окружения для разработки

Перед тем как начать программировать, вам понадобится редактор кода для C#. Microsoft предлагает несколько редакторов кода и интегрированных сред разработки (IDE), среди которых:

  • Visual Studio Code
  • GitHub Codespaces
  • Visual Studio
  • Visual Studio для Mac

Использование Visual Studio Code для кроссплатформенной разработки

Наиболее современным и легковесным редактором кода от Microsoft, который поддерживает работу на различных платформах, является Visual Studio Code. Этот редактор может быть установлен на всех основных операционных системах, включая Windows, macOS и множество дистрибутивов Linux, таких как Red Hat Enterprise Linux (RHEL) и Ubuntu.

Visual Studio Code является хорошим выбором для современной кроссплатформенной разработки, так как он поддерживает большое количество расширений, которые облегчают работу с множеством языков программирования помимо C#. Будучи кроссплатформенным и легковесным, он может быть установлен на всех платформах, на которых будут развёртываться ваши приложения, что упрощает быстрое исправление ошибок и т.д.

Visual Studio Code является наиболее популярной средой разработки — более половины разработчиков выбрали его в опросе Stack Overflow за 2019 год (в опросе 2020 года этот вопрос не задавался), как показано на следующем графике:

Дополнительная информация: Опрос можно прочитать по следующей ссылке:
Stack Overflow Developer Survey 2019

Использование Visual Studio Code позволяет разработчику использовать кроссплатформенный редактор кода для создания кроссплатформенных приложений. Поэтому я выбрал Visual Studio Code для всех глав этой книги, кроме последней, потому что для создания мобильных приложений нужны специальные функции, недоступные в Visual Studio Code.

Дополнительная информация: О планах Microsoft по Visual Studio Code можно прочитать по следующей ссылке:
Visual Studio Code Roadmap

Если вы предпочитаете использовать Visual Studio 2019 или Visual Studio для Mac вместо Visual Studio Code, вы, конечно, можете это сделать, но я буду предполагать, что вы уже знакомы с тем, как их использовать, поэтому я не буду давать пошаговые инструкции для них в этой книге. Эта книга не учит использованию редакторов кода, она учит писать код, и это одинаково независимо от инструмента.

Дополнительная информация: Сравнение Visual Studio Code и Visual Studio 2019 можно прочитать по следующей ссылке:
Visual Studio Code vs Visual Studio 2019

Как начать использовать Visual Studio Code

  1. Скачайте и установите Visual Studio Code. Если у вас его ещё нет, посетите официальный сайт Visual Studio Code и загрузите версию для вашей операционной системы.
  2. Освоение базовых функций. Visual Studio Code имеет интуитивно понятный интерфейс, но стоит потратить немного времени на изучение основных функций, таких как работа с папками проекта, настройка темы интерфейса, установка и использование расширений.
  3. Установка расширений для C#. Для эффективной работы с C# вам нужно установить расширение C# от Microsoft. Откройте раздел «Расширения» (иконка с квадратами на боковой панели), затем введите в поиске «C#» и установите расширение, предложенное Microsoft.
  4. Создание и запуск первого проекта.
    • Откройте Visual Studio Code.
    • Откройте терминал (можно нажать Ctrl+``) и введите dotnet new console -n HelloWorld` для создания нового консольного проекта C# с именем «HelloWorld».
    • Перейдите в папку проекта, введя cd HelloWorld.
    • Откройте папку проекта в Visual Studio Code, выполнив code . в терминале внутри папки проекта.
    • Отредактируйте файл Program.cs, чтобы он выглядел так:
      using System;
      
      namespace HelloWorld
      {
          class Program
          {
              static void Main(string[] args)
              {
                  Console.WriteLine("Привет, мир!");
              }
          }
      }
    • Сохраните файл и запустите проект, введя dotnet run в терминале.

Поздравляю! Вы только что создали и запустили своё первое приложение на C# в Visual Studio Code. Этот опыт будет основой для всех следующих проектов, которые вы будете разрабатывать в рамках изучения этой статьи.

Использование GitHub Codespaces для разработки в облаке

GitHub Codespaces — это полностью настроенная среда разработки, основанная на Visual Studio Code, которую можно развернуть в облачной среде и доступ к которой возможен через любой веб-браузер. Она поддерживает Git-репозитории, расширения и встроенный интерфейс командной строки, так что вы можете редактировать, запускать и тестировать код с любого устройства.

Как начать работу с GitHub Codespaces

  1. Подготовка к работе: Для начала работы с GitHub Codespaces вам нужно иметь аккаунт на GitHub. GitHub Codespaces доступен для пользователей с платными тарифными планами GitHub, включая GitHub Pro, GitHub Team и GitHub Enterprise.
  2. Создание Codespace:
    • Перейдите в ваш GitHub-репозиторий, в котором вы хотите работать.
    • Кликните на кнопку «Code» в верхней части репозитория и выберите «Open with Codespaces».
    • Нажмите «New codespace» на нужной ветке репозитория.
  3. Работа с кодом:
    • После создания и загрузки Codespace, вы увидите среду, похожую на Visual Studio Code, но в вашем браузере.
    • Вы можете редактировать файлы, использовать терминал и устанавливать расширения, как если бы работали в локальной версии Visual Studio Code.
  4. Коммит и пуш изменений:
    • Внесите изменения в ваш код прямо в Codespaces.
    • Используйте встроенный Git-клиент для коммита и пуша изменений в ваш репозиторий. Вы можете делать это через графический интерфейс пользователя или через командную строку.
  5. Запуск и тестирование приложений:
    • Вы можете запускать приложения и тесты прямо из Codespaces, используя терминал или специальные команды.
    • Просмотрите результаты в браузере или в панели вывода в Codespaces.

Преимущества использования GitHub Codespaces

  • Мгновенный доступ к коду: Начать работу можно практически мгновенно, без необходимости настройки локальной среды разработки.
  • Консистентная среда: Каждый Codespace предоставляет точно такую же среду, что устраняет проблему «у меня работает локально».
  • Удобство для совместной работы: Легко поделиться вашим Codespace с коллегами для совместной работы над проектом.
  • Безопасность и изоляция: Ваш код и среда разработки изолированы от локальной машины, что повышает безопасность.

Дополнительные ресурсы и ссылки

  • Подробнее о GitHub Codespaces:
    • О GitHub Codespaces — здесь вы найдете полную информацию о работе с Codespaces.

Использование Visual Studio для разработки приложений под Windows

Microsoft Visual Studio 2019 работает на Windows, начиная с версии 7 SP1 и выше. Однако для создания приложений Universal Windows Platform (UWP), которые устанавливаются из Магазина Windows и работают в песочнице для обеспечения безопасности вашего компьютера, рекомендуется использовать Windows 10.

На текущий момент (2024 год) более актуальной является версия Microsoft Visual Studio 2022. Эта версия предоставляют улучшенную поддержку для разработки современных приложений для Windows, включая более новые версии UWP и разработку настольных приложений Windows.

Visual Studio — это основной инструмент от Microsoft для создания приложений под Windows.

Для начинающих разработчиков:

  1. Скачайте и установите последнюю версию Visual Studio — Перейдите на официальный сайт Microsoft и загрузите Visual Studio Community, которая бесплатна для индивидуального использования и обучения. Это поможет вам использовать все самые свежие инструменты и возможности.
  2. Изучите основы UWP — Universal Windows Platform (UWP) позволяет вашему приложению работать на всех устройствах под управлением Windows 10 или Windows 11, включая ПК, планшеты, Xbox и даже HoloLens. Изучите базовые концепции и как создать своё первое UWP приложение.
  3. Обратите внимание на безопасность — UWP приложения работают в изолированной среде, что повышает безопасность. Это означает, что ваше приложение имеет ограниченный доступ к системным ресурсам и данных пользователя, что важно для защиты конфиденциальности.
  4. Пользуйтесь современными ресурсами и документацией — Поскольку технологии быстро меняются, всегда ищите последние статьи, руководства и официальную документацию, чтобы быть в курсе новых возможностей и лучших практик.
  5. Практика и сообщество — Присоединяйтесь к сообществам разработчиков, таким как Stack Overflow, GitHub или локальные группы. Обмен знаниями и опытом поможет вам быстрее решать возникающие проблемы и учиться на опыте других.

Использование Visual Studio для Mac для разработки мобильных приложений

Для компиляции приложений под операционные системы Apple, такие как iOS, чтобы они работали на устройствах вроде iPhone и iPad, вам необходим Xcode. Однако этот инструмент работает только на macOS. Хотя вы можете использовать Visual Studio 2019 на Windows с расширениями Xamarin для написания кроссплатформенных мобильных приложений, для компиляции вам всё равно понадобится macOS и Xcode.

Поэтому мы будем использовать Visual Studio 2022 или 2024 для Mac в macOS в главе 21, «Создание кроссплатформенных мобильных приложений».

Для начинающих разработчиков:

  1. Установка Visual Studio для Mac — Скачайте и установите последнюю версию Visual Studio для Mac с официального сайта Microsoft. Эта версия специально адаптирована для macOS и предоставляет все необходимые инструменты для разработки мобильных приложений.
  2. Необходимость Xcode — Даже если вы используете Visual Studio для разработки, для сборки и тестирования приложений под iOS на реальных устройствах или в симуляторе вам нужен Xcode. Убедитесь, что у вас установлена последняя версия Xcode с App Store на вашем Mac.
  3. Разработка с Xamarin — Xamarin — это фреймворк в составе Visual Studio, который позволяет разрабатывать кроссплатформенные приложения на C#. Ваши приложения могут работать на iOS, Android и других платформах, используя общий кодовый базис.
  4. Подготовка к разработке — Прежде чем начать, убедитесь, что у вас настроены все сертификаты и профили разработчика Apple для сборки и развертывания приложений на iOS устройствах. Это можно сделать через Xcode или Apple Developer Center.
  5. Изучение MAUI — Последние версии Visual Studio для Mac поддерживают .NET MAUI (Multi-platform App UI), который является эволюцией Xamarin.Forms. MAUI позволяет создавать кроссплатформенные приложения для Android, iOS, macOS и Windows из одной кодовой базы на C#. Ознакомьтесь с документацией MAUI для более эффективной работы.
  6. Тестирование и отладка — Используйте встроенные средства Visual Studio и Xcode для тестирования и отладки ваших приложений. Вам доступны эмуляторы и симуляторы для различных устройств, а также возможность подключения реальных устройств для тестирования.
  7. Практика и обучение — Не забывайте использовать ресурсы, такие как Microsoft Learn, документация Xamarin и .NET MAUI, а также различные онлайн-курсы и сообщества разработчиков, чтобы улучшить свои навыки и оставаться в курсе последних трендов в мобильной разработке.

Развертывание кроссплатформенных приложений

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

.NET 5 и последующие версии поддерживают развертывание на следующих платформах:

  1. Windows:
    • Windows 7 SP1 или более поздняя версия.
    • Windows 10 версия 1607 или более поздняя.
    • Windows Server 2012 R2 SP1 или более поздняя.
    • Nano Server версия 1809 или более поздняя.
  2. Mac:
    • macOS High Sierra (версия 10.13) или более поздняя.
  3. Linux:
    • Alpine Linux 3.11 или более поздняя.
    • CentOS 7 или более поздняя.
    • Debian 9 или более поздняя.
    • Fedora 30 или более поздняя.
    • Linux Mint 18 или более поздняя.
    • openSUSE 15 или более поздняя.
    • Red Hat Enterprise Linux (RHEL) 7 или более поздняя.
    • SUSE Enterprise Linux 12 SP2 или более поздняя.
    • Ubuntu 18.04, 19.10, 20.04 или более поздняя.

Дополнительная информация: Официальный список поддерживаемых операционных систем можно найти по следующей ссылке: Поддерживаемые ОС в .NET 5

Поддержка Windows ARM64 в .NET 5 и более поздних версиях позволяет разрабатывать и развертывать приложения на устройствах Windows ARM, таких как Microsoft Surface Pro X.

Дополнительная информация: Более подробно о поддержке Windows ARM64 можно прочитать по следующей ссылке: Поддержка Windows ARM64

Рекомендации для начинающих разработчиков

  1. Выбор среды разработки: Независимо от вашей операционной системы, вы можете использовать Visual Studio, Visual Studio Code или любой другой редактор кода, который поддерживает .NET, для создания кроссплатформенных приложений.
  2. Развертывание приложений: Используйте возможности .NET 5 (или более новые версии, такие как .NET 6, .NET 7) для развертывания приложений на различных платформах. Это обеспечивает гибкость и расширяет вашу аудиторию.
  3. Тестирование на разных платформах: Убедитесь, что вы тестируете ваше приложение на всех целевых платформах. Это может включать использование эмуляторов, виртуальных машин или реальных устройств.
  4. Обучение и документация: Изучите документацию и руководства .NET для лучшего понимания кроссплатформенной разработки. Microsoft Docs предоставляет обширные ресурсы для обучения.
  5. Использование контейнеров: Рассмотрите возможность использования Docker и других технологий контейнеризации для упрощения развертывания и обеспечения консистентности среды исполнения вашего приложения на всех платформах.
  6. Сообщество и поддержка: Присоединяйтесь к сообществам разработчиков, таким как Stack Overflow, GitHub и форумы .NET, чтобы получать поддержку, делиться опытом и учиться у других разработчиков.

Понимание версий Microsoft Visual Studio Code

Microsoft выпускает новую версию Visual Studio Code с новыми функциями почти каждый месяц и версии с исправлениями ошибок ещё чаще. Например:

  • Версия 1.49 — релиз с новыми функциями за август 2020 года.
  • Версия 1.49.1 — релиз с исправлениями за август 2020 года.

Дополнительная информация: О последних версиях Visual Studio Code можно прочитать по ссылке: Обновления Visual Studio Code

В этой статье используется версия 1.90,, но версия самого Visual Studio Code не так важна, как версия расширения C# для Visual Studio Code, которое вы установите позже.

Хотя расширение C# не является обязательным, оно предоставляет IntelliSense для автодополнения кода, навигацию по коду и возможности отладки, поэтому его установка крайне рекомендуется. Для поддержки C# 9 следует установить версию расширения C# 1.23 или более позднюю.

Некоторые общие сочетания клавиш, которые мы будем использовать, представлены в следующей таблице:

Действие macOS Windows
Показать палитру команд Cmd + Shift + P Ctrl + Shift + P
Показать палитру команд F1 F1
Перейти к определению F12 F12
Вернуться назад Ctrl + — Alt + ←
Перейти вперёд Ctrl + Shift + — Alt + →
Показать терминал Ctrl + ` (backtick) Ctrl + ‘ (quote)
Новый терминал Ctrl + Shift + ` (backtick) Ctrl + Shift + ‘ (quote)
Переключить строковый комментарий Ctrl + / Ctrl + /
Переключить блочный комментарий Shift + Option + A Shift + Alt + A

Рекомендую скачать PDF с сочетаниями клавиш для вашей операционной системы из следующего списка:

Дополнительная информация: Узнать о стандартных сочетаниях клавиш для Visual Studio Code и о том, как их настроить, можно по ссылке: Клавиатурные сочетания Visual Studio Code

Visual Studio Code значительно улучшился за последние пару лет и приятно удивил Microsoft своей популярностью. Если вы любите новшества и готовы использовать самые последние разработки, то можете попробовать Insiders edition — это ежедневная сборка следующей версии Visual Studio Code.

Загрузка и установка Visual Studio Code

Теперь вы готовы загрузить и установить Visual Studio Code, его расширение для C# и .NET SDK :

  1. Загрузка и установка Visual Studio Code:
    • Перейдите на официальный сайт Visual Studio Code и загрузите либо стабильную версию (Stable build), либо версию для инсайдеров (Insiders edition).
    • Запустите скачанный установочный файл и следуйте инструкциям мастера установки для завершения процесса.
  2. Загрузка и установка .NET SDK:
    • Перейдите на страницу загрузки .NET 5 SDK на официальном сайте Microsoft.
    • Выберите версию SDK, соответствующую вашей операционной системе, и загрузите её.
    • Запустите установочный файл SDK и следуйте инструкциям для установки.
  3. Установка расширения C# в Visual Studio Code:
    • Запустите приложение Visual Studio Code.
    • В интерфейсе Visual Studio Code кликните по иконке «Расширения» или перейдите в меню «Вид | Расширения» (или используйте сочетание клавиш Ctrl+Shift+X на Windows/Linux, Cmd+Shift+X на macOS).

     

    • C# является одним из самых популярных расширений, поэтому оно часто находится в топе списка. Если нет, введите «C#» в строку поиска.
    • В результатах поиска найдите расширение C# от Microsoft (обычно — первый результат), как показано на скриншоте ниже.Пакеты VSCode
    • Нажмите «Установить» и дождитесь окончания загрузки и установки необходимых пакетов.

Дополнительная информация: Больше информации о поддержке C# в Visual Studio Code можно найти по ссылке: Поддержка C# в Visual Studio Code

Установка дополнительных расширений

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

Расширения и их описание

  1. C# для Visual Studio Code (под управлением OmniSharp)
    • Идентификатор: ms-vscode.csharp
    • Описание: Поддержка редактирования кода на C#, включая подсветку синтаксиса, IntelliSense (автоматическое дополнение кода), переход к определению, поиск всех ссылок, поддержку отладки для .NET и работу с проектами в формате .csproj на Windows, macOS и Linux.
    • Как адаптировать: Убедитесь, что у вас установлена последняя версия Visual Studio Code и .NET SDK. Это расширение автоматически обновляется для поддержки последних версий C# и .NET.
  2. Инструменты проекта MSBuild
    • Идентификатор: tinytoy.msbuild-project-tools
    • Описание: Предоставляет IntelliSense для файлов проектов MSBuild, включая автодополнение для элементов <PackageReference>.
    • Как адаптировать: MSBuild является ключевой частью сборки проектов .NET. Современные версии Visual Studio Code и .NET SDK предоставляют более интегрированную поддержку MSBuild, но это расширение может быть особенно полезно для детальной работы с файлами .csproj и другими файлами MSBuild.
  3. C# XML Documentation Comments
    • Идентификатор: k--kato.docomment
    • Описание: Генерация XML-комментариев документации.
    • Как адаптировать: XML комментарии используются для документирования кода и облегчения его понимания. Это расширение автоматизирует создание таких комментариев, что особенно полезно для начинающих разработчиков.
  4. REST Client
    • Идентификатор: humao.rest-client
    • Описание: Отправка HTTP-запросов и просмотр ответов непосредственно в Visual Studio Code.
    • Как адаптировать: Использование HTTP-клиентов важно для тестирования и разработки веб-сервисов. Это расширение позволяет выполнять запросы и просматривать ответы без переключения между различными инструментами или программами, что делает его идеальным для обучения основам веб-скрапинга и API.
  5. ILSpy .NET Decompiler
    • Идентификатор: icsharpcode.ilspy-vscode
    • Описание: Декомпиляция сборок MSIL – поддержка .NET Framework, .NET Core и .NET Standard.
    • Как адаптировать: Декомпиляция может быть полезна для изучения и анализа существующих бинарных сборок, когда исходный код недоступен. Это расширение обеспечивает интеграцию с ILSpy, популярным декомпилятором, в Visual Studio Code. С учетом современных тенденций, убедитесь в использовании последних доступных версий .NET, поскольку они обеспечивают лучшую совместимость и безопасность.

Общие рекомендации для новичков

  • Изучите основы Visual Studio Code: Это мощная среда разработки, которая поддерживает множество расширений для различных языков и технологий.
  • Практикуйтесь в использовании IntelliSense: Это не просто автодополнение; это инструмент, который может помочь вам учиться, предоставляя информацию о функциях, типах данных и кодовых сниппетах.
  • Работайте с реальными проектами: Пробуйте изменять простые проекты, используя расширения для улучшения понимания процесса разработки.
  • Используйте REST Client для понимания веб-запросов: Это поможет вам лучше понять, как работают веб-API и как можно программно взаимодействовать с веб-сервисами.
  • Изучите декомпиляцию для понимания кода: Хотя это может показаться сложным, начальное понимание того, как работает существующий код, может сильно помочь в обучении.

Что такое .NET (dotnet). Основные термины и технологии в разработке.

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

Что такое .NET Framework

.NET Framework — это платформа для разработки, которая включает в себя Common Language Runtime (CLR) для управления выполнением кода, и Base Class Library (BCL), богатую библиотеку классов для построения приложений. Microsoft изначально задумывала .NET Framework как потенциально кроссплатформенное решение, но основные усилия были направлены на оптимизацию работы с Windows.

Начиная с версии .NET Framework 4.5.2, он является официальным компонентом операционной системы Windows. .NET Framework установлен более чем на миллиард компьютеров, поэтому изменения в нем должны быть минимальными. Даже исправления ошибок могут привести к проблемам, поэтому обновления выходят нечасто.

Все приложения на компьютере, написанные для .NET Framework, используют одну и ту же версию CLR и библиотеки, хранящиеся в Глобальном Кэше Сборок (Global Assembly Cache, GAC). Это может привести к проблемам, если некоторым приложениям требуется определенная версия для совместимости.

Хорошая практика: На практике .NET Framework — это платформа, ориентированная только на Windows и являющаяся устаревшей. Не рекомендуется создавать новые приложения на её основе.

Адаптация и дополнительные сведения для новичков

  1. Что такое CLR?
    CLR (Common Language Runtime) — это сердце .NET Framework. Он отвечает за выполнение приложений, управление памятью, обработку исключений и другие ключевые аспекты. Подумайте о нем как о двигателе, который приводит в действие ваш код.
  2. Что такое BCL?
    BCL (Base Class Library) — это обширная коллекция предварительно написанных классов, которые предоставляют функциональность, такую как ввод-вывод файлов, графический интерфейс, доступ к базам данных и многое другое. Это как инструментальный ящик, где для каждой задачи уже есть подходящий инструмент.
  3. Global Assembly Cache (GAC):
    GAC — это специальное хранилище в Windows для сборок .NET Framework. Оно позволяет приложениям делиться библиотеками, но также может быть источником проблем с совместимостью, если разные приложения требуют одну и ту же библиотеку, но в разных версиях.
  4. Переход на современные платформы:
    С учетом того, что .NET Framework считается устаревшей, рекомендуется использовать .NET 5 или более новые версии .NET (такие как .NET 6, .NET 7), которые объединяют и улучшают функции предыдущих платформ, таких как .NET Core и .NET Framework, и поддерживают кроссплатформенную разработку.
  5. Преимущества современных .NET платформ:
    Новые платформы .NET, включая .NET 5 и выше, предлагают множество улучшений:
    • Кроссплатформенность: Разрабатывайте и запускайте приложения на Windows, Linux и macOS.
    • Улучшенная производительность: Более быстрые приложения благодаря оптимизациям в runtime и компиляторе.
    • Упрощенное управление зависимостями: Использование локальных библиотек вместо GAC уменьшает проблемы совместимости.
    • Современные API и возможности: Поддержка последних стандартов и технологий, включая HTTP/2, gRPC, контейнеры Docker и многое другое.
  6. Для новичков:
    Если вы только начинаете изучать разработку на .NET:
    • Изучите C#: Это основной язык программирования для .NET.
    • Практика через проекты: Начните с простых консольных приложений и постепенно переходите к веб-приложениям и API.
    • Используйте Visual Studio Code или Visual Studio: Эти среды разработки предоставляют мощные инструменты для написания, отладки и тестирования вашего кода.

Что такое Mono и Xamarin

Mono — это кроссплатформенная реализация .NET Framework, разработанная сторонними разработчиками. Несмотря на свою универсальность, проект Mono существенно отставал от официальной реализации .NET Framework.

Дополнительная информация: Больше о проекте Mono можно узнать по ссылке: http://www.mono-project.com/

Mono нашёл своё применение как основа мобильной платформы Xamarin, а также платформ кроссплатформенной разработки игр, таких как Unity.

Дополнительная информация: Подробнее о Unity можно прочитать здесь: https://docs.unity3d.com/

В 2016 году Microsoft приобрела Xamarin и теперь предоставляет ранее платное расширение Xamarin бесплатно в составе Visual Studio 2019. Microsoft переименовала инструмент разработки Xamarin Studio, который ранее позволял создавать только мобильные приложения, в Visual Studio для Mac. Теперь он позволяет создавать и другие типы проектов, такие как консольные приложения и веб-сервисы. В Visual Studio 2019 для Mac Microsoft заменила части редактора Xamarin Studio компонентами из Visual Studio для Windows, чтобы обеспечить более тесное сопоставление опыта и производительности.

Mono — это проект, который позволял использовать .NET на различных платформах, не ограничиваясь Windows. Это было особенно важно до появления .NET Core и .NET 5 (и более новых версий), которые изначально создавались как кроссплатформенные.

Xamarin — это инструмент, который использовал Mono для создания мобильных приложений на iOS и Android с помощью C#. С приобретением Xamarin компанией Microsoft, этот инструмент стал бесплатным и теперь интегрирован в Visual Studio, значительно упрощая разработку мобильных приложений.

Unity — популярный движок для разработки игр, который также использует C# в качестве основного языка программирования, благодаря интеграции с Mono и последующим обновлениями.

Если вы только начинаете работу с разработкой под .NET, рекомендуется использовать последние версии Visual Studio и .NET (например, .NET 6 или .NET 7), которые обеспечивают лучшую поддержку и производительность для кроссплатформенной разработки, включая мобильные платформы и игры.

Visual Studio для Mac теперь предлагает тот же уровень функциональности, что и версия для Windows, что делает разработку на macOS более удобной и доступной для создания разнообразных приложений, включая веб-сервисы и консольные приложения.

Что такое .NET Core

Сегодня мы живём в действительно кроссплатформенном мире, где современная разработка мобильных приложений и облачных решений сделала операционную систему Windows менее значимой. Из-за этого Microsoft работала над тем, чтобы освободить .NET от тесной связи с Windows. В процессе переписывания .NET Framework для обеспечения полной кроссплатформенности, компания воспользовалась возможностью для рефакторинга и удаления значительных частей, которые больше не считаются основными.

Этот новый продукт получил название .NET Core и включает в себя кроссплатформенную реализацию CLR под названием CoreCLR и упрощённую библиотеку классов, известную как CoreFX.

Скотт Хантер, директор-партнёр по программе управления .NET в Microsoft, сказал: «Сорок процентов наших клиентов .NET Core — это совершенно новые разработчики для платформы, и это именно то, чего мы хотим от .NET Core. Мы хотим привлечь новых людей.»

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

Дополнительная информация: Подробнее о позиционировании Microsoft .NET Core и .NET Framework можно прочитать по ссылке: https://devblogs.microsoft.com/dotnet/update-on-net-core-3-0-and-net-framework-4-8/

.NET Core — это современная кроссплатформенная версия .NET, которая позволяет разработчикам создавать приложения для различных операционных систем, включая Windows, Linux и macOS, не теряя при этом производительности и гибкости.

CoreCLR — это кроссплатформенная версия Common Language Runtime, которая представляет собой среду выполнения для .NET Core, обеспечивающую выполнение приложений и управление памятью.

CoreFX — это набор основных библиотек и API, которые предоставляют базовые функции, такие как коллекции, ввод-вывод, сериализация и другие стандартные операции. Эти библиотеки оптимизированы для работы в кроссплатформенной среде.

Одно из главных преимуществ .NET Core — это возможность развертывания вместе с приложением (side-by-side deployment), что позволяет обновлять .NET Core для каждого приложения независимо, не рискуя повлиять на работу других приложений на том же компьютере.

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

Если вы новичок в разработке на .NET, начните с изучения .NET Core (или .NET 5 и выше, которые являются следующими итерациями .NET Core), так как это даст вам современные инструменты и возможности для создания разнообразных приложений. Вам будет полезно изучать C# и основы работы с Visual Studio, одной из наиболее популярных сред разработки для .NET.

Что такое .NET и путь к единому .NET

На конференции разработчиков Microsoft Build в мае 2020 года команда .NET объявила о задержке своих планов по объединению всех платформ .NET. Было сказано, что .NET 5 выйдет 10 ноября 2020 года и объединит все различные платформы .NET, за исключением мобильных. Поддержка мобильных платформ будет включена только в .NET 6.

Основные изменения в .NET 5

  • Переименование .NET Core в .NET: .NET Core теперь называется просто .NET, и было принято решение пропустить номер версии четыре, чтобы избежать путаницы с .NET Framework 4.x.
  • Ежегодные релизы: Microsoft планирует ежегодные крупные релизы в ноябре, аналогично тому, как Apple выпускает новые версии iOS каждый сентябрь.

История версий .NET

Ниже представлена таблица, показывающая, когда были выпущены ключевые версии современного .NET, а также планы на будущие релизы. Здесь также указывается, какая версия платформы использовалась в различных изданиях книги:

Версия Дата выпуска Издание Опубликовано
.NET Core RC1 Ноябрь 2015 Первое Март 2016
.NET Core 1.0 Июнь 2016
.NET Core 1.1 Ноябрь 2016
.NET Core 1.0.4 и .NET Core 1.1.1 Март 2017 Второе Март 2017
.NET Core 2.0 Август 2017
.NET Core для UWP в Windows 10 Fall Creators Update Октябрь 2017 Третье Ноябрь 2017
.NET Core 2.1 (LTS) Май 2018
.NET Core 2.2 (Current) Декабрь 2018
.NET Core 3.0 (Current) Сентябрь 2019 Четвертое Октябрь 2019
.NET Core 3.1 (LTS) Декабрь 2019
.NET 5.0 (Current) Ноябрь 2020 Пятое Ноябрь 2020
.NET 6.0 (LTS) Ноябрь 2021 Шестое Ноябрь 2021

Дополнение: Версии после .NET 5 и .NET 6

  • .NET 7.0 (Current): Выпущен в ноябре 2022 года. Основные улучшения включают повышение производительности, оптимизацию облачных приложений и улучшение поддержки C# 11.
  • .NET 8.0 (LTS): Выпущен в ноябре 2023 года. Новые функции, такие как обновление для облачных приложений, улучшенное взаимодействие с облачными сервисами и повышение безопасности.

Ссылки на дополнительную информацию

Больше информации о планах Microsoft по пути к единому .NET можно найти по этой ссылке: Путь к единому .NET.

Поддержка версий .NET

Версии .NET подразделяются на два типа: версии с долгосрочной поддержкой (Long-Term Support, LTS) и текущие версии (Current). Рассмотрим их особенности:

  • LTS (Long-Term Support):
    • Стабильные версии, требующие меньше обновлений на протяжении всего срока службы.
    • Подходят для приложений, которые не планируется часто обновлять.
    • Поддерживаются в течение 3 лет после официального релиза.
  • Current:
    • Включают новейшие функции, которые могут изменяться на основе обратной связи.
    • Подходят для активно разрабатываемых приложений, так как содержат последние улучшения.
    • После 3-месячного периода поддержки предыдущая версия больше не будет поддерживаться.

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

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

Чтобы лучше понять разницу между Current и LTS версиями, можно взглянуть на диаграмму:

  • Синие полосы (LTS) — трехлетняя поддержка без изменения цвета.
  • Зеленые полосы (Current) — переменной длины с постепенным переходом в светло-зеленый цвет, обозначающий 3-месячный период поддержки после выпуска новой версии.

Поддержка версий .net

Примеры использования поддержки

  • Если проект создается на основе .NET 5.0, а в феврале 2021 года Microsoft выпускает .NET 5.1, то обновиться до .NET 5.1 нужно до конца мая 2021 года.
  • Если необходима более длительная поддержка, то лучше использовать .NET Core 3.1 или .NET 6.0 после его выхода в ноябре 2021 года.

Конец поддержки

Большинство версий .NET Core достигли конца поддержки, за исключением LTS версий, которые поддерживаются следующим образом:

  • .NET Core 2.1: поддержка завершится 21 августа 2021 года.
  • .NET Core 3.1: поддержка завершится 3 декабря 2022 года.
  • .NET 6.0: поддержка завершится в ноябре 2024 года, если релиз пройдет по плану в ноябре 2021 года.

Дополнительная информация

Подробнее о политике поддержки .NET можно узнать по ссылке: Политика поддержки .NET.

Актуальные версии с учетом современных реалий

  • .NET 7.0 (Current): поддержка завершится в мае 2024 года.
  • .NET 8.0 (LTS): релиз в ноябре 2023 года, поддержка завершится в ноябре 2026 года.

Рекомендации для новичков

Для тех, кто только начинает изучать .NET:

  • Если вы разрабатываете проект, требующий долгосрочной стабильности, выбирайте LTS-версии.
  • Если вам нужны самые свежие функции и вы готовы к частым обновлениям, выбирайте текущие версии.
  • Всегда обновляйтесь до последнего патча, чтобы получать поддержку.

Версии .NET Runtime и .NET SDK: простое объяснение

П

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

В то же время версионирование .NET SDK не следует семантическому версионированию строго. Мажорные и минорные номера версий SDK согласованы с версией Runtime, с которой они связаны. Номер патча в версии SDK следует своей схеме, указывающей на мажорную и минорную версию SDK. Рассмотрим пример в следующей таблице:

Изменение Версия Runtime Версия SDK
Первый релиз 5.0.0 5.0.100
Исправление ошибок в SDK 5.0.0 5.0.101
Исправление ошибок в Runtime и SDK 5.0.1 5.0.102
Новая функциональность в SDK 5.0.1 5.0.200

Дополнительная информация

Вы можете узнать больше о работе с версиями на официальной странице документации по ссылке: Документация .NET Core — Версии

Современные реалии

С учётом современных требований и обновлений, важно использовать последние стабильные версии .NET SDK и Runtime. На данный момент это версия .NET 8.0. При работе с .NET, рекомендуется следить за обновлениями на официальном сайте Microsoft и регулярно обновлять свои инструменты разработки до актуальных версий. Это позволяет использовать новейшие функции языка и улучшения производительности, а также минимизировать риски, связанные с безопасностью.

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

Чем отличается SDK и Runtime версии в .NET

В экосистеме .NET важно понимать разницу между SDK (Software Development Kit) и Runtime. Эти компоненты играют разные роли:

.NET Runtime

  • Описание: .NET Runtime — это среда выполнения, которая позволяет запускать приложения, написанные на .NET. Она отвечает за управление выполнением кода, включая обработку исключений, сбор мусора, управление памятью и другие ключевые аспекты выполнения программ.
  • Назначение: Если на вашем компьютере установлен только Runtime, вы можете запускать приложения на .NET, но не можете их разрабатывать. Это аналогично тому, как вы можете просматривать веб-страницы в браузере, но не можете создавать веб-страницы без соответствующих инструментов разработки.

.NET SDK (Software Development Kit)

  • Описание: .NET SDK включает все то, что есть в Runtime, и добавляет инструменты, необходимые для разработки и сборки приложений. Это включает компиляторы, библиотеки, и инструменты командной строки, которые используются для создания новых проектов, компиляции кода, управления зависимостями и публикации приложений.
  • Назначение: SDK необходим для разработчиков, которые создают приложения на .NET. Без SDK вы не сможете написать или скомпилировать исходный код.

Какую версию ставить разработчику?

Для разработчиков важно установить .NET SDK, так как он включает в себя все необходимые инструменты для разработки, в том числе и Runtime. Установка SDK позволяет разработчику:

  1. Разрабатывать и тестировать приложения: SDK содержит компиляторы и инструменты, нужные для написания кода и его компиляции.
  2. Запускать приложения: Поскольку SDK включает Runtime, установка SDK позволяет также и запускать приложения.
  3. Использовать дополнительные инструменты: В SDK есть дополнительные инструменты для управления зависимостями, версионирования, диагностики и оптимизации приложений.

Пример установки .NET SDK

Для установки последней версии .NET SDK, выполните следующие шаги (для Windows, Linux, macOS могут быть свои особенности в командах):

  1. Перейдите на официальную страницу .NET SDK.
  2. Выберите нужную версию (рекомендуется последняя стабильная версия, на данный момент это .NET 7).
  3. Скачайте и установите SDK согласно инструкциям для вашей операционной системы.

Пример проверки установленной версии

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

dotnet --list-sdks

Вывод

  • Разработчику нужно устанавливать .NET SDK, так как он включает в себя всё необходимое для разработки и запуска приложений.
  • Пользователю, который только запускает приложения, достаточно .NET Runtime.

Выбирая версию для установки, лучше всегда ориентироваться на последнюю стабильную версию SDK, чтобы иметь доступ к новейшим функциям и улучшениям.

Удаление старых версий .NET

.NET Runtime обновления совместимы с мажорной версией, например, 5.x, и последующие релизы .NET SDK сохраняют возможность сборки приложений, нацеленных на предыдущие версии Runtime. Это позволяет безопасно удалять старые версии.

Для того чтобы увидеть, какие версии SDK и Runtime установлены на вашей машине, используйте следующие команды:

  • Чтобы увидеть список установленных SDK:
    dotnet --list-sdks
  • Чтобы увидеть список установленных Runtime:
    dotnet --list-runtimes

Удаление в Windows

В Windows для удаления .NET SDK воспользуйтесь разделом «Приложения и возможности» в настройках системы:

  1. Откройте «Настройки» Windows.
  2. Перейдите в раздел «Приложения» -> «Приложения и возможности».
  3. Найдите необходимую версию .NET SDK или .NET Runtime в списке установленных программ.
  4. Нажмите на него и выберите «Удалить».

Удаление в macOS и Linux

На macOS и Linux для удаления версий .NET используйте инструмент dotnet-core-uninstall. Этот инструмент помогает безопасно удалить старые версии .NET SDK и Runtime.

Для установки и использования dotnet-core-uninstall выполните следующие шаги:

  1. Установите инструмент, скачав его с официального сайта или через пакетный менеджер. Например, используйте Homebrew в macOS:
    brew install dotnet-core-uninstall
  2. Используйте команду для удаления ненужных версий. Например, удалить все предварительные версии SDK, кроме последней:
    dotnet-core-uninstall --all-previews-but-latest --sdk
  3. Также можно удалить конкретную версию SDK или Runtime, указав её:
    dotnet-core-uninstall --sdk 5.0.100

Дополнительная информация

Пример использования

Команда для регулярного удаления предварительных версий SDK:

dotnet-core-uninstall --all-previews-but-latest --sdk

Этот вариант подходит для тех, кто часто работает с бета-версиями SDK для тестирования новых функций, но хочет поддерживать порядок в установленных версиях.

Вывод

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

Что такое.NET Standard

В 2019 году в экосистеме .NET было три основных направления, развиваемых Microsoft:

  • .NET Core: для кроссплатформенных и новых приложений.
  • .NET Framework: для устаревших (legacy) приложений.
  • Xamarin: для мобильных приложений.

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

Для решения этой проблемы Microsoft ввела .NET Standard — спецификацию, описывающую набор API, который должны реализовать все платформы .NET для обеспечения совместимости. Например, базовая поддержка обозначается соблюдением .NET Standard 1.4.

Современный Подход к .NET

С выходом .NET 5 и .NET 6, а затем и .NET 7, Microsoft значительно упростила эти различия, объединив все основные платформы под одним «зонтиком» — .NET 6 и .NET 7, которые продолжили эволюцию .NET Core. Это обеспечило:

  • Унификацию API: Благодаря .NET 6 и .NET 7, разработчики могут использовать один и тот же набор API для создания приложений для любых платформ — от серверов и настольных систем до мобильных устройств.
  • Упрощение миграции: Переход на .NET 6 или .NET 7 с предыдущих версий стал проще благодаря улучшенной совместимости и инструментам миграции.
  • Сокращение необходимости в .NET Standard: С появлением единой платформы .NET, значение .NET Standard как моста между различными платформами уменьшилось, хотя понимание этого стандарта все еще важно для поддержки существующих проектов.

Рекомендации по Использованию Современных Версий

  1. Переходите на .NET 6, .NET 7 или .NET 8: Эти версии .NET являются текущим стандартом для всех типов приложений. .NET 6 обеспечивает долгосрочную поддержку (LTS), что делает его предпочтительным выбором для многих корпоративных приложений. .NET 8 продолжает развивать функциональность с упором на производительность и удобство разработки.
  2. Используйте C# 10 или C# 11: Последние версии языка C# включают множество улучшений, которые упрощают код и повышают его читаемость и безопасность.
  3. Обновление до последних версий IDE: Используйте последние версии Visual Studio или Visual Studio Code. Эти среды разработки предоставляют лучшую поддержку для .NET 7 и .NET 8, включая улучшенные инструменты отладки и профилирования.
  4. Миграция устаревших проектов: Для проектов на .NET Framework рассмотрите миграцию на .NET 7 или .NET 8 для улучшения производительности и безопасности. Инструменты, такие как Portability Analyzer и .NET Upgrade Assistant, могут помочь в этом процессе.
  5. Удаление старых версий SDK и Runtime: Поддерживайте чистоту вашей разработческой среды, регулярно удаляя неиспользуемые или устаревшие версии .NET SDK и Runtime с помощью инструментов, таких как dotnet-core-uninstall.

Дополнительная Информация

  • Версии .NET Standard и поддерживаемые ими платформы .NET доступны по следующей ссылке: Версии .NET Standard.
  • Подробнее о возможностях и нововведениях в .NET 7 и .NET 8 можно узнать на официальном сайте Microsoft.

Вывод

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

Что такое промежуточный язык (Intermediate Language, IL)

Компилятор C# (называемый Roslyn), который используется инструментом командной строки dotnet, преобразует ваш исходный код на C# в промежуточный язык (IL) и сохраняет этот код в сборке — это может быть файл DLL или EXE. Инструкции кода IL напоминают инструкции языка ассемблера, которые выполняются виртуальной машиной .NET, известной как CoreCLR (Common Language Runtime).

Как работает выполнение кода на .NET:

  1. Загрузка и компиляция: Во время выполнения CoreCLR загружает IL код из сборки. Компилятор Just-In-Time (JIT) компилирует его в нативные инструкции процессора.
  2. Исполнение: Затем эти инструкции исполняются процессором на вашем компьютере.

Преимущества трёхступенчатого процесса компиляции:

  • Переносимость: Одно из главных преимуществ этого трёхступенчатого процесса компиляции заключается в том, что Microsoft может создавать реализации CLR для разных операционных систем, включая Linux, macOS и Windows. Тот же IL код может исполняться везде благодаря второму процессу компиляции, который генерирует код для нативной операционной системы и набора инструкций процессора.

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

  • Независимо от того, на каком языке написан исходный код — будь то C#, Visual Basic или F# — все приложения .NET используют IL код для своих инструкций, хранящихся в сборке.

Инструменты дизассемблирования:

  • Microsoft и другие организации предоставляют инструменты дизассемблера, которые могут открывать сборку и показывать этот IL код. Например, расширение ILSpy .NET Decompiler позволяет увидеть IL код, находящийся в сборке.

С течением времени и развитием платформы .NET, механизмы компиляции и выполнения кода стали ещё более оптимизированными и мощными:

  1. .NET 5, .NET 6, .NET 7 и .NET 8: Эти версии .NET продолжают использовать тот же базовый механизм компиляции из C# в IL и далее в нативный код через JIT-компилятор. Однако с каждой новой версией улучшаются производительность JIT-компиляции и возможности оптимизации.
  2. AOT (Ahead-of-Time) Компиляция: В дополнение к JIT, современные версии .NET начали использовать AOT компиляцию для некоторых сценариев, позволяя компилировать IL код в нативный код заранее, что увеличивает производительность приложений, уменьшая время запуска.
  3. Cross-Platform Support: .NET Core и последующие версии .NET улучшили поддержку кросс-платформенности, позволяя одному и тому же IL коду эффективно работать на разных операционных системах без изменений в коде.
  4. Инструменты для работы с IL: Продвинутые инструменты, такие как dotnet-dump и dotnet-trace, позволяют более глубоко анализировать и работать с IL кодом и исполнением приложений, предоставляя больше возможностей для оптимизации и отладки.
  5. Развитие языка C#: Современные версии C#, такие как C# 10 и C# 11, включают новые возможности, которые транслируются в новые паттерны использования IL. Это позволяет писать более выразительный и эффективный код на высоком уровне.
  6. Образовательные ресурсы: Понимание IL становится более доступным благодаря ресурсам, таким как онлайн-курсы, интерактивные среды и сообщества, что позволяет разработчикам лучше понимать внутреннее устройство .NET и оптимизировать свои приложения.

Вывод

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

Сравнение технологий .NET

1. .NET 6

  • Описание: .NET 6 — это версия с долгосрочной поддержкой (LTS), которая включает улучшенные возможности для разработки кроссплатформенных приложений. Поддерживает C# 10 и предоставляет улучшенные производительность и возможности для работы с облачными и контейнеризированными приложениями.
  • Поддерживаемые ОС: Windows, macOS, Linux.
  • Поддержка C#: C# 10.

2. .NET 7

  • Описание: .NET 7 продолжает развивать функциональность, начатую в .NET 6, с улучшениями в производительности, масштабируемости и разработке UI (MAUI). Поддерживает C# 11 и включает новые API для работы с машинным обучением и IoT.
  • Поддерживаемые ОС: Windows, macOS, Linux.
  • Поддержка C#: C# 11.

3. .NET Framework 4.8

  • Описание: Последняя версия .NET Framework, с фокусом на поддержке существующих приложений. Новые разработки рекомендуется вести на .NET 6 или .NET 7.
  • Поддерживаемые ОС: Windows.
  • Поддержка C#: C# 7.3 (ограниченная поддержка C# 8).

4. Xamarin

  • Описание: Xamarin теперь входит в состав .NET MAUI, который является частью .NET 6 и .NET 7, для разработки мобильных и настольных приложений. Xamarin.Forms стал частью MAUI.
  • Поддерживаемые ОС: Android, iOS, macOS (через MAUI).
  • Поддержка C#: C# 10 в Xamarin, C# 10/11 в MAUI.

Таблица сравнения

Итак, обновленная таблица сравнения для .NET технологий выглядит следующим образом:

Технология Описание Поддерживаемые ОС Поддержка C#
.NET 5 Современный набор функций, полная поддержка C# 9. Windows, macOS, Linux C# 9
.NET 6 LTS версия, улучшенные возможности кроссплатформенности, поддержка C# 10. Windows, macOS, Linux C# 10
.NET 7 Развитие функциональности .NET 6, поддержка C# 11. Windows, macOS, Linux C# 11
.NET Framework 4.8 Последняя версия устаревшего .NET Framework. Windows C# 7.3, частично C# 8
Xamarin Входит в состав MAUI для разработки мобильных и настольных приложений. Android, iOS, macOS C# 10
MAUI Часть .NET 6/7/8 для разработки мобильных и настольных приложений. Windows, macOS, Linux, Android, iOS C# 10/11

Вывод

Современные версии .NET, такие как .NET 6 и .NET 8, предоставляют разработчикам мощные инструменты для создания кроссплатформенных приложений с высокой производительностью и масштабируемостью. .NET Framework перешёл в статус «legacy», а Xamarin был интегрирован в .NET MAUI, что упрощает разработку мобильных и настольных приложений в едином стиле и подходе. Эти изменения отражают стремление Microsoft унифицировать и совершенствовать разработку на всех платформах под единым брендом .NET.

Создание консольного приложения с использованием Visual Studio Code

В этом разделе мы рассмотрим, как создать консольное приложение, используя Visual Studio Code. Инструкции и скриншоты предоставлены для Windows, но аналогичные действия будут работать и на macOS, и на различных вариантах Linux.

Основные различия будут касаться нативных команд командной строки, таких как удаление файла: команда и путь могут отличаться в Windows и в macOS/Linux. К счастью, инструмент командной строки dotnet будет идентичен на всех платформах.

Написание кода с использованием Visual Studio Code

Давайте начнем писать код!

  1. Запустите Visual Studio Code.
  2. Откройте папку для работы:
    • На macOS перейдите в File | Open…
    • На Windows перейдите в File | Open Folder…
    • В обеих ОС, можно кликнуть на кнопку Open Folder в панели EXPLORER или кликнуть на ссылку Open folder… на вкладке Welcome.

    В диалоговом окне перейдите в папку пользователя на macOS (например, markjprice), в папку Documents на Windows, или в любую другую директорию, где вы хотите сохранить свои проекты.
    Открыть папку в VSCode

  3. Создайте новую папку для кода:
    • Кликните на кнопку New Folder и назовите папку Code.
  4. В папке Code создайте новую папку Chapter01.
  5. В папке Chapter01 создайте новую папку HelloCS.
  6. Выберите папку HelloCS и откройте её:
    • На macOS кликните Open.
    • На Windows кликните Select Folder.
  7. Откройте терминал:
    • Перейдите в View | Terminal,
    • или на macOS нажмите `Ctrl + « (backtick),
    • на Windows нажмите Ctrl + ' (одинарная кавычка).

    На Windows комбинация `Ctrl + « (backtick) разделяет текущее окно!

  8. В терминале введите следующую команду:

     

    dotnet new console
    

    Вы увидите, что инструмент командной строки dotnet создает новый проект консольного приложения в текущей папке, и в окне EXPLORER отображаются два созданных файла: HelloCS.csproj и Program.cs.Новое консольное приложение dotnet

  9. В обозревателе EXPLORER кликните на файл Program.cs, чтобы открыть его в окне редактора.При первом открытии Program.cs, Visual Studio Code может потребовать скачать и установить зависимости C#, такие как OmniSharp, Razor Language Server и отладчик .NET Core, если это не было сделано при установке расширения C#.
  10. Если появляется предупреждение о том, что необходимые ассеты отсутствуют, кликните «Yes».Через несколько секунд в панели EXPLORER появится папка .vscode с файлами, используемыми во время отладки, как вы узнаете в главе 4, «Написание, отладка и тестирование функций».
  11. В файле Program.cs измените строку 9 так, чтобы текст, выводимый в консоль, был Hello, C#!:

     

    Console.WriteLine("Hello, C#!");
    
  12. Перейдите в File | Auto Save.Эта настройка автоматически сохраняет файлы, что избавляет от необходимости помнить о сохранении перед каждой пересборкой приложения.

Сборка и Запуск Приложения

  1. Соберите ваше приложение, выполнив в терминале команду:
    dotnet build
    

    Это скомпилирует ваше приложение и покажет, есть ли ошибки.

  2. Запустите ваше приложение, используя команду:
    dotnet run
    

    Это выполнит скомпилированный файл и вы должны увидеть в терминале Привет, C#!.

Написание программ верхнего уровня

Возможно, вы подумали, что для вывода «Hello, C#!» требуется слишком много кода. Несмотря на то, что шаблон проекта сам напишет за вас всю стандартную структуру программы, неужели нет более простого способа?

Да, начиная с C# 9, появилась такая возможность благодаря концепции «программ верхнего уровня».

Сравним традиционное минимальное консольное приложение с новым форматом. Вот как выглядит традиционное приложение:

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

А вот минимальное приложение с использованием программы верхнего уровня:

Console.WriteLine("Привет C#");

Гораздо проще, не правда ли? Если вы начинаете с пустого файла и пишете все инструкции самостоятельно, этот подход является более удобным.

Во время компиляции весь стандартный код, необходимый для определения класса Program и метода Main, генерируется автоматически и оборачивается вокруг ваших инструкций. Все инструкции using по-прежнему должны быть в начале файла. В проекте может быть только один файл такого типа.

Лично я, особенно когда обучаю C#, планирую продолжать использовать традиционный шаблон проекта, так как он более соответствует реальности. Мне не нравится скрытый «магический» код по той же причине, по которой мне не нравятся графические пользовательские интерфейсы, скрывающие элементы в попытке упростить взаимодействие, но в то же время вызывающие фрустрацию у пользователей, потому что они не могут найти нужные функции.

Например, в консольное приложение можно передать аргументы. Используя программу верхнего уровня, вам нужно знать, что параметр args существует, хотя вы его не видите.

Использование репозитория на GitHub

Git — это широко используемая система управления исходным кодом. GitHub — это платформа, предоставляющая удобный интерфейс для работы с Git. Компания Microsoft приобрела GitHub в 2018 году, что обеспечивает его дальнейшую интеграцию с инструментами Microsoft.

Использование Git с Visual Studio Code

Visual Studio Code поддерживает работу с Git, но использует установку Git на вашем компьютере, поэтому сначала необходимо установить Git версии 2.0 или новее.

Вы можете скачать Git по следующей ссылке: https://git-scm.com/download.

Если вам удобнее работать с графическим интерфейсом, вы можете скачать GitHub Desktop по следующей ссылке: https://desktop.github.com.

Для начала работы с системой управления версиями Git и платформой GitHub вам нужно выполнить следующие шаги:

  1. Установка Git:
    • Перейдите по ссылке https://git-scm.com/download и скачайте последнюю версию Git для вашей операционной системы.
    • Установите Git, следуя инструкциям установщика.
  2. Установка Visual Studio Code:
  3. Настройка Git в Visual Studio Code:
    • Откройте Visual Studio Code.
    • Убедитесь, что Git установлен и настроен правильно. Это можно сделать, открыв терминал в VS Code (Ctrl+) и введя команду git —version`, чтобы проверить версию Git.
  4. Использование GitHub Desktop (опционально):
    • Если вы предпочитаете графический интерфейс, скачайте и установите GitHub Desktop по ссылке https://desktop.github.com.
    • Войдите в свою учетную запись GitHub и используйте интерфейс для клонирования и управления репозиториями.

Поиск качественной информации о программировании в интернете

В этом разделе мы рассмотрим, как находить качественную информацию о программировании в интернете.

Чтение документации Microsoft

Основной ресурс для получения помощи по инструментам и платформам разработки от Microsoft — это Microsoft Docs. Здесь вы найдете официальную документацию по всем продуктам Microsoft.

Получение помощи для инструмента dotnet

В командной строке вы можете получить помощь по командам инструмента dotnet.

  1. Открытие официальной документации в браузере для команды dotnet new:
    dotnet help new
    

    Введите следующую команду в командной строке или в терминале Visual Studio Code:

    Эта команда откроет документацию по команде dotnet new в браузере.

  2. Получение справки по команде с помощью флага -h или --help:
    dotnet new console -h
    

    Введите следующую команду, чтобы получить справочную информацию прямо в командной строке:

    Вы увидите следующий частичный вывод:

    Console Application (C#)
    Author: Microsoft
    Description: A project for creating a command-line application that can 
    run on .NET Core on Windows, Linux, and macOS
    Options: 
     -f|--framework The target framework for the project.
       net5.0         - Target net5.0
       netcoreapp3.1  - Target netcoreapp3.1
       netcoreapp3.0  - Target netcoreapp3.0
       Default: net5.0
     --langVersion Sets langVersion in the created project file
       text - Optional
     --no-restore If specified, skips the automatic restore of the project 
     on create.
       bool - Optional
       Default: false / (*) true
    

    Пояснения:

    • -f|—framework: Устанавливает целевую платформу для проекта. Например, net5.0, netcoreapp3.1, netcoreapp3.0. По умолчанию используется net5.0.
    • —langVersion: Устанавливает версию языка в создаваемом файле проекта.
    • —no-restore: Если указано, пропускает автоматическое восстановление проекта при его создании. Опционально, по умолчанию false (если указан переключатель без значения, используется true).

Получение определений типов и их кода

Одной из самых полезных комбинаций клавиш в Visual Studio Code является F12 для перехода к определению (Go To Definition). Это позволяет увидеть, как выглядит публичное определение типа или кода, считывая метаданные в скомпилированной сборке. Некоторые инструменты, такие как ILSpy .NET Decompiler, даже могут обратным инжинирингом восстановить код C# из метаданных и IL-кода.

Давайте рассмотрим, как использовать функцию Go To Definition.

  1. Открытие проекта в Visual Studio Code:
    • Откройте папку HelloCS.
  2. Работа с кодом:
    • В файле Program.cs внутри метода Main введите следующую строку для объявления целочисленной переменной с именем z:
      int z;
      
    • Нажмите внутри слова int и затем нажмите F12 или щелкните правой кнопкой мыши и выберите Go To Definition. В новом окне кода вы сможете увидеть, как определен тип данных int.
      #region сборка System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
      // C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.6\ref\net8.0\System.Runtime.dll
      #endregion
      
      #nullable enable
      
      using System.Diagnostics.CodeAnalysis;
      using System.Globalization;
      using System.Numerics;
      using System.Runtime.CompilerServices;
      
      namespace System
      {
          //
          // Сводка:
          //     Represents a 32-bit signed integer.
          public readonly struct Int32 : IComparable, IComparable<Int32>, IConvertible, IEquatable<Int32>, IFormattable, IParsable<Int32>, ISpanFormattable, ISpanParsable<Int32>, IAdditionOperators<Int32, Int32, Int32>, IAdditiveIdentity<Int32, Int32>, IBinaryInteger<Int32>, IBinaryNumber<Int32>, IBitwiseOperators<Int32, Int32, Int32>, IComparisonOperators<Int32, Int32, bool>, IEqualityOperators<Int32, Int32, bool>, IDecrementOperators<Int32>, IDivisionOperators<Int32, Int32, Int32>, IIncrementOperators<Int32>, IModulusOperators<Int32, Int32, Int32>, IMultiplicativeIdentity<Int32, Int32>, IMultiplyOperators<Int32, Int32, Int32>, INumber<Int32>, INumberBase<Int32>, ISubtractionOperators<Int32, Int32, Int32>, IUnaryNegationOperators<Int32, Int32>, IUnaryPlusOperators<Int32, Int32>, IUtf8SpanFormattable, IUtf8SpanParsable<Int32>, IShiftOperators<Int32, Int32, Int32>, IMinMaxValue<Int32>, ISignedNumber<Int32>
          {
              //
              // Сводка:
              //     Represents the largest possible value of an System.Int32. This field is constant.
              public const Int32 MaxValue = 2147483647;
              //
              // Сводка:
              //     Represents the smallest possible value of System.Int32. This field is constant.
              public const Int32 MinValue = -2147483648;
      
              //
              // Сводка:
              //     Computes the absolute of a value.
              //

Что вы увидите:

  • Тип int:
    • Определен с использованием ключевого слова struct.
    • Находится в сборке System.Runtime.
    • Принадлежит пространству имен System.
    • Назван Int32, что означает, что int является псевдонимом для типа System.Int32.
    • Реализует интерфейсы, такие как IComparable.
    • Имеет константы для максимальных и минимальных значений.
    • Имеет методы, такие как Parse.

Полезная практика:

При попытке использовать Go To Definition иногда может возникать ошибка No definition found. Это происходит потому, что расширение C# не знает о текущем проекте. Для решения этой проблемы выполните следующие шаги:

  • Перейдите в меню View | Command Palette.
  • Введите и выберите OmniSharp: Select Project.
  • Выберите нужный проект, с которым хотите работать.

Примечание:

Сейчас функция Go To Definition может не показаться вам особенно полезной, так как вы, возможно, еще не знакомы с этими терминами. Однако, к концу первой части, посвященной изучению C#, вы будете знать достаточно, чтобы эта функция стала действительно полезной.

Пример использования метода Parse

Прокрутите окно редактора кода вниз, чтобы найти метод Parse с одним параметром типа string и комментарии, начинающиеся с 87-й строки. В комментариях вы увидите, что Microsoft задокументировала исключения, которые могут возникнуть при вызове этого метода, включая ArgumentNullException, FormatException и OverflowException. Теперь мы знаем, что вызов этого метода нужно обернуть в блок try и перехватывать соответствующие исключения.

public static Int32 Parse(ReadOnlySpan<char> s, IFormatProvider? provider);
        //
        // Сводка:
        //     Converts the string representation of a number to its 32-bit signed integer equivalent.
        //
        //
        // Параметры:
        //   s:
        //     A string containing a number to convert.
        //
        // Возврат:
        //     A 32-bit signed integer equivalent to the number contained in s.
        //
        // Исключения:
        //   T:System.ArgumentNullException:
        //     s is null.
        //
        //   T:System.FormatException:
        //     s is not in the correct format.
        //
        //   T:System.OverflowException:
        //     s represents a number less than Int32.MinValue or greater than Int32.MaxValue.

Дополнительные ресурсы для получения помощи

  • Документация Microsoft: Официальный ресурс для всех инструментов и платформ Microsoft.
  • Stack Overflow: Сообщество разработчиков, где можно задать вопросы и найти ответы на самые разнообразные проблемы.

Поиск ответов на Stack Overflow

Stack Overflow — это самый популярный сторонний веб-сайт для получения ответов на сложные вопросы по программированию. Он настолько популярен, что поисковые системы, такие как DuckDuckGo, имеют специальный формат запроса для поиска по этому сайту.

Как искать ответы на Stack Overflow с помощью DuckDuckGo

  1. Запуск веб-браузера:
    • Откройте ваш любимый веб-браузер.
  2. Поиск через DuckDuckGo:
    • Перейдите на сайт DuckDuckGo.com.
    • Введите следующий запрос в поисковую строку:
      !so securestring
      
    • Обратите внимание на результаты поиска.

Пример

При поиске запроса !so securestring на DuckDuckGo вы получите результаты, которые ведут прямо на страницы Stack Overflow с обсуждениями и ответами, связанными с использованием SecureString.Помощь через StackOverflow

Объяснение

  • «!so»: Специальный оператор DuckDuckGo для поиска непосредственно на сайте Stack Overflow.
  • «securestring»: Ключевое слово или фраза, по которой вы хотите найти ответы.

Практическое применение

Использование такого подхода позволяет значительно ускорить процесс поиска нужной информации и решения проблем. DuckDuckGo автоматически фильтрует результаты и показывает только те, которые относятся к Stack Overflow, что экономит ваше время и усилия.

Преимущества использования Stack Overflow

  • Богатая база знаний: На сайте собраны миллионы вопросов и ответов, которые касаются самых разнообразных тем в программировании.
  • Сообщество экспертов: Вопросы рассматриваются и отвечаются опытными разработчиками, что гарантирует высокое качество ответов.
  • Рейтинговая система: Лучшие ответы поднимаются наверх благодаря голосам сообщества, что помогает быстро находить наиболее полезную информацию.

Дополнительные советы

  • Используйте точные ключевые слова: Чем точнее запрос, тем релевантнее результаты.
  • Просматривайте комментарии: Часто в комментариях к ответам можно найти дополнительную полезную информацию или уточнения.
  • Учитесь задавать хорошие вопросы: Если не можете найти нужный ответ, попробуйте задать свой вопрос. Важно, чтобы он был четким и содержал все необходимые детали.

Поиск ответов с использованием Google

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

  1. Перейдите на сайт Google.
    Откройте ваш любимый браузер и введите в адресной строке google.com для перехода на главную страницу поисковой системы.
  2. Запустите поиск информации о сборке мусора.
    Если вы введете запрос, например, «garbage collection», то скорее всего, первыми в результатах вы увидите объявления местных служб вывоза мусора. Чтобы найти информацию о сборке мусора в контексте информатики, вам может потребоваться пролистать несколько страниц или уточнить запрос.
  3. Улучшите поиск, ограничив его полезным сайтом.
    Для повышения точности можно ограничить поиск одним или несколькими сайтами, где часто обсуждаются вопросы программирования. Например, Stack Overflow — отличный ресурс для поиска технических ответов.Допустим, вам нужна информация о сборке мусора в C#. Вы можете использовать следующий запрос в Google для улучшения результатов:
    garbage collection site:stackoverflow.com +C# -Java

    Здесь:

    • garbage collection — это тема вашего запроса.
    • site:stackoverflow.com — ограничивает поиск результатами только с сайта Stack Overflow.
    • +C# — добавляет в поиск указание, что вас интересуют материалы, связанные с C#.
    • -Java — исключает из результатов страницы, где упоминается Java (это помогает сузить круг поиска, если вы не работаете с Java).

Дополнения для лучшего понимания

  • Выбирайте точные термины: Если вам нужна специфическая информация, используйте точные технические термины в вашем запросе. Например, «concurrent garbage collection in .NET 6» даст более конкретные результаты.
  • Используйте кавычки для фраз: Если вы ищете информацию, в которой важен точный порядок слов, используйте кавычки. Например, «what is garbage collection» в кавычках покажет страницы, где эти слова идут вместе как фраза.
  • Исключайте ненужное: Используйте минус перед словами, которые хотите исключить из поиска, чтобы сделать результаты более релевантными.
  • Пользуйтесь фильтрами Google: Вы можете использовать фильтры по времени (например, за последний год), чтобы получить более актуальные результаты.

Контрольные вопросы и упражнения

Задание 1.1 – Проверьте свои знания

  1. Почему программист может использовать разные языки, например, C# и F#, для написания приложений, работающих на .NET?
    Ответ:
     .NET предоставляет общую платформу для выполнения приложений, написанных на различных языках. Это возможно благодаря Common Language Runtime (CLR), которая компилирует код, написанный на любом языке, поддерживаемом .NET (например, C#, F#, VB.NET), в промежуточный язык (IL). IL затем исполняется на CLR, что обеспечивает совместимость и возможность взаимодействия между разными языками на одной платформе.
  2. Какую команду нужно ввести в командной строке для создания консольного приложения?
    Ответ:
    Для создания консольного приложения на C# используйте команду:
    dotnet new console

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

  3. Какую команду нужно ввести в командной строке для компиляции и выполнения кода C#?
    Ответ:
    Для компиляции и выполнения кода C# используйте следующие команды:

    dotnet build
    dotnet run

    Команда dotnet build компилирует проект и создаёт исполняемый файл, а dotnet run запускает выполнение скомпилированного приложения.

  4. Какой ярлык клавиатуры в Visual Studio Code открывает терминал?
    Ответ:
    Чтобы открыть терминал в Visual Studio Code, используйте ярлык клавиатуры:

    Ctrl + `

    Здесь ` — это клавиша, расположенная слева от цифры 1 на большинстве клавиатур.

  5. Лучше ли Visual Studio 2019, чем Visual Studio Code?
    Ответ:
    Это зависит от потребностей разработчика. Visual Studio 2019 — это полнофункциональная интегрированная среда разработки (IDE), предоставляющая множество инструментов для разработки на различных языках и платформах. Visual Studio Code — это более лёгкий редактор кода, который может быть расширен с помощью плагинов и подходит для разработки с использованием большого количества языков и технологий. Для больших проектов и комплексной разработки чаще выбирают Visual Studio 2019, а для быстрого редактирования кода, работы с web-технологиями и скриптами — Visual Studio Code.
  6. Лучше ли .NET Core, чем .NET Framework?
    Ответ:
    .NET Core — это более современная кроссплатформенная версия .NET, которая позволяет разрабатывать приложения для различных платформ (Windows, Linux, macOS). .NET Framework — это более старая версия, ориентированная только на Windows. .NET Core предлагает улучшенную производительность, модульность и поддержку контейнеров, что делает его более предпочтительным для новых проектов и для разработки микросервисов.
  7. Что такое .NET Standard и почему он всё ещё важен?
    Ответ:
    .NET Standard — это формальная спецификация API, которая определяет набор базовых интерфейсов программирования приложений (API), доступных во всех версиях .NET. Это позволяет разработчикам создавать библиотеки, совместимые с различными реализациями .NET, такими как .NET Core, .NET Framework и Xamarin. .NET Standard важен для обеспечения совместимости и переносимости кода между разными платформами и версиями .NET.
  8. Как называется стартовый метод консольного приложения .NET и как он должен быть объявлен?
    Ответ:
    Стартовый метод консольного приложения .NET называется Main. Он может быть объявлен несколькими способами, но самый базовый выглядит так:

    public static void Main(string[] args)
    {
    }

    Этот метод может также возвращать int или быть асинхронным Task или Task<int>.

  9. Где искать помощь по ключевому слову C#?
    Ответ:
    Помощь по ключевым словам и другим элементам языка C# можно найти в официальной документации Microsoft по C#, доступной по ссылке: Официальная документация C#.
  10. Где искать решения наиболее распространённых программных задач?
    Ответ:
    Решения типичных задач по программированию можно найти на платформе Stack Overflow. Также полезным может быть поиск по Google, особенно с использованием Google Advanced Search для более точного поиска. Не забывайте про образовательные платформы, такие как Microsoft Learn и другие ресурсы с примерами кода и обсуждениями типичных задач.

Задание 1.2 – Практика C# в любом месте

Вы можете писать и тестировать код C# не только в Visual Studio или Visual Studio Code, но и онлайн с помощью .NET Fiddle. Это интерактивная среда, которая позволяет быстро создавать, компилировать и запускать сниппеты кода C# прямо в вашем браузере.

Задание 1.3 – Изучение тем

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

Понравилась статья? Поделиться с друзьями:
Школа Виктора Комлева
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.