Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
В издании рассмотрены все темы, связанные с разработкой на C#. В начале книги вы ознакомитесь с основами C#, в том числе с объектно-ориентированным программированием, а также с новыми возможностями C# 8.0. Несколько глав посвящено .NET Standard API, применяемым для запроса данных и управления ими, отслеживания производительности и ее повышения, работы с файловой системой, асинхронными потоками, сериализацией и шифрованием. Кроме того, на примерах кроссплатформенных приложений вы сможете собрать и развернуть собственные. Например, веб-приложения с использованием ASP.NET Core или мобильные приложения на Xamarin Forms. Также вы познакомитесь с технологиями, применяемыми при создании приложений Windows для ПК, в частности с Windows Forms, Windows Presentation Foundation (WPF) и Universal Windows Platform (UWP).
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 769
Veröffentlichungsjahr: 2024
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Переводчик С. Черников
Марк Прайс
C# 8 и .NET Core. Разработка и оптимизация. — СПб.: Питер, 2024.
ISBN 978-5-4461-1700-0
© ООО Издательство "Питер", 2024
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Марк Дж. Прайс — обладатель сертификатов Microsoft Certified Trainer (MCT), Microsoft Specialist: Programming in C# и Microsoft Specialist: Architecting Microsoft Azure Infrastructure Solutions. За его плечами более 20 лет практики в области обучения и программирования.
С 1993 года Марк сдал свыше 80 экзаменов корпорации Microsoft по программированию и специализируется на подготовке других людей к успешному прохождению тестирования. Его студенты — как 16-летние новички, так и профессионалы с многолетним опытом. Марк ведет эффективные тренинги, делясь реальным опытом консультирования и разработки систем для корпораций по всему миру.
В период с 2001 по 2003 год Марк посвящал все свое время разработке официального обучающего программного обеспечения в штаб-квартире Microsoft в американском городе Редмонд. В составе команды он написал первый обучающий курс по C#, когда была только выпущена ранняя альфа-версия языка. Во время сотрудничества с Microsoft он преподавал на курсах повышения квалификации сертифицированных корпорацией специалистов, читая лекции по C# и .NET.
В настоящее время Марк разрабатывает и поддерживает обучающие курсы для системы Digital Experience Platform компании Episerver, лучшей .NET CMS в сфере цифрового маркетинга и электронной коммерции.
В 2010 году Марк получил свидетельство об окончании последипломной программы обучения, дающее право на преподавание. Он преподает старшеклассникам математику в двух средних школах в Лондоне. Кроме того, Марк получил сертификат Computer Science BSc. Hons. Degree в Бристольском университете (Англия).
Спасибо моим родителям, Памеле и Иану, за мое воспитание, за то, что привили мне трудолюбие и любопытство к миру. Спасибо моим сестрам, Эмили и Джульетте, за то, что полюбили меня, неуклюжего старшего братца. Спасибо моим друзьям и коллегам, которые вдохновляют меня технически и творчески. Наконец, спасибо всем, кого я учил на протяжении многих лет, за то, что побудили меня быть лучшим преподавателем, чем я есть.
Дамир Арх — профессионал с многолетним опытом разработки и сопровождения различного программного обеспечения: от сложных корпоративных программных проектов до современных потребительских мобильных приложений. Он работал со многими языками, однако его любимым остается C#. Стремясь к совершенствованию процессов, Дамир предпочитает разработку, основанную на тестировании, непрерывной интеграции и непрерывном развертывании. Он делится своими знаниями, выступая на конференциях, ведет блоги и пишет статьи. Дамир Арх семь раз подряд получал престижную премию Microsoft MVP за разработку технологий. В свободное время он всегда в движении: любит пеший туризм, геокэшинг, бег и скалолазание.
Я хотел бы поблагодарить мою семью и друзей за огромную помощь в создании этой книги, за их терпение и понимание в выходные дни и вечера, которые я провел, работая за компьютером.
Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.
Эта глава посвящена настройке среды разработки; сходствам и различиям .NET Core, .NET Framework и .NET Standard; а также тому, как применять различные инструменты для создания простейших приложений с помощью C# и .NET Core, используя Microsoft Visual Studio Code.
После первой главы эту книгу можно разделить на три части: первая знакомит с грамматикой и терминологией языка C#; вторая содержит описание типов, доступных в .NET Core для создания функций приложения; третья включает примеры распространенных кросс-платформенных приложений, которые вы можете создавать с использованием C# и .NET. Последние две главы посвящены двум типам приложений, которые могут быть разработаны с помощью языка C#, однако первая не описывает разработку кросс-платформенных приложений, а вторая еще не задействует .NET Core, поэтому эти главы следует рассматривать в качестве дополнительных.
Изучать сложные темы многим людям проще в процессе имитации и повторения, а не во время чтения детальных теоретических объяснений. Поэтому я тоже не буду перегружать книгу подробным объяснением каждого шага. Идея в том, чтобы дать вам задание написать некий код, собрать приложение и посмотреть, что происходит при запуске.
Вам не нужно будет разбираться, как все работает. Вы поймете это в процессе создания собственных приложений, выйдя за рамки того, чему может научить книга.
Выражаясь словами Сэмюэля Джонсона, составившего в 1755 году толковый словарь английского языка, я, вероятно, допустил «несколько диких промахов и забавных несуразиц, от которых не может быть свободна ни одна из работ подобной сложности». Я принимаю на себя полную ответственность за них и надеюсь, что вы оцените мою попытку «поймать ветер» и написать книгу о таких быстроразвивающихся технологиях, как C# и .NET Core, и приложениях, которые можете разработать с их помощью.
В этой главе:
• настройка среды разработки;
• знакомство с .NET;
• разработка консольных приложений с использованием Visual Studio Code;
• управление исходным кодом с помощью GitHub;
• поиск справочной информации.
Прежде чем приступать к программированию, вам нужно настроить редактор кода для C#. Microsoft предоставляет целое семейство редакторов и интегрированных сред разработки (Integrated Development Environment, IDE), содержащих редактор кода C#:
• Visual Studio Code;
• Visual Studio 2019;
• Visual Studio 2019 для Mac.
Microsoft Visual Studio Code — cамая современная и упрощенная кросс-платформен-ная среда разработки, разработанная корпорацией Microsoft. Ее можно запустить во всех распространенных операционных системах, включая Windows, macOS и множество разновидностей Linux, таких как Red Hat Enterprise Linux (RHEL) и Ubuntu.
Visual Studio Code — хороший выбор для современной кросс-платформенной разработки, поскольку имеет обширный и развивающийся набор расширений для поддержки многих языков, помимо C#. И, будучи кросс-платформенной и простой средой разработки, Visual Studio Code может быть установлена на всех платформах, на которых будут установлены ваши приложения, для выполнения быстрых правок и прочих задач.
Visual Studio Code — редактор кода для разработки кросс-платформенных приложений. Поэтому я решил использовать данную программу во всех главах книги, кроме двух последних, где требуются недоступные в Visual Studio Code специальные функции для разработки приложений в операционной системе Windows и мобильных приложений.
О намерениях Microsoft в отношении Visual Studio Code можно прочитать на сайте github.com/Microsoft/vscode/wiki/Roadmap.
Если вы предпочитаете использовать Visual Studio 2019 или Visual Studio для Mac вместо Visual Studio Code, то, конечно, это возможно, но я предполагаю, что вы уже знакомы с данными приложениями, и потому не буду давать в книге пошаговые инструкции по их применению.
Информацию, касающуюся Visual Studio Code и Visual Studio 2019, можно получить на сайте www.itworld.com/article/3403683/visual-studio-code-stepping-on-visual-studios-toes.html.
Программа Microsoft Visual Studio 2019 работает только в операционной системе Windows версии 7 SP1 или более поздней. Для создания приложений универсальной платформы Windows (Universal Windows Platform, UWP) вам необходимо запустить приложение в операционной системе Windows 10. Это единственный инструмент Microsoft для разработчиков, который может создавать приложения для Windows, поэтому мы будем ссылаться на него в главе 20.
Разработка приложений для устройств под управлением операционной системы iOS и iPadOS требует наличия компьютера с установленной системой macOS и средой Xcode. Вы можете использовать Visual Studio 2019 на Windows с установленными расширениями для Xamarin для написания кросс-платформенного мобильного приложения, но для его компиляции все равно понадобятся macOS и Xcode.
Итак, мы будем использовать программу Visual Studio 2019 для Mac в операционной системе macOS в главе 21.
В табл. 1.1 приведены инструменты и операционные системы, которые я рекомендую использовать для каждой из глав в этой книге.
Таблица 1.1
Глава
Среда разработки
Операционная система
1–19
Visual Studio Code
Windows, macOS или Linux
20
Visual Studio 2019
Windows 10
21
Visual Studio 2019 для Mac
macOS
Работая над этой книгой, я использовал MacBook Pro и следующее программное обеспечение:
• Visual Studio Code на macOS как мой основной редактор кода;
• Visual Studio Code в операционной системе Windows 10 (в виртуальной машине) для тестирования поведения, специфичного для операционной системы, например работы с файловой системой;
• Visual Studio 2019 в операционной системе Windows 10 (в виртуальной машине);
• Visual Studio 2019 для Mac в операционной системе macOS для создания мобильных приложений.
Google и Amazon — сторонники среды Visual Studio Code, о чем можно прочитать на сайте www.cnbc.com/2018/12/20/microsoft-cmo-capossela-says-google-employees-use-visual-studio-code.html.
Выбранные вами среда разработки и используемая операционная система не влияют на то, где могут быть развернуты ваши программы.
Сейчас .NET Core поддерживает следующие платформы для развертывания:
• Windows — Windows 7 SP1 или версии выше. Windows 10 версия 1607 или выше; Windows Server 2012 R2 SP1 или версии выше. Nano Server версия 1803 или выше;
• Mac — macOS High Sierra (версия 10.13) или версии выше;
• Linux — RHEL 6 или версии выше. RHEL, CentOS, Oracle Linux версия 7 или выше. Ubuntu 16.04 или версии выше. Fedora 29 или версии выше. Debian 9 или версии выше. openSUSE 15 или версии выше.
С официальным списком поддерживаемых операционных систем можно ознакомиться на сайте github.com/dotnet/core/blob/master/release-notes/3.0/3.0-supported-os.md.
Компания Microsoft почти каждый месяц выпускает релиз и обновляет программу Visual Studio Code. Например:
• Version 1.38, август 2019 года, функциональная версия;
• Version 1.38.1, август 2019 года, исправленная версия.
С последними версиями можно ознакомиться на сайте code.visualstudio.com/updates.
В книге используется версия 1.38.1, выпущенная 11 сентября 2019 года. Однако версия Microsoft Visual Studio Code менее важна, чем версия расширения C# for Visual Studio Code, которое вы установите позже.
Расширение C# не требуется, однако предоставляет технологию IntelliSense при вводе, навигации по коду и отладке, поэтому его весьма желательно установить. Для поддержки C# 8.0 вам необходимо установить расширение C# версии 1.21.3 или выше.
В этой книге я познакомлю вас с сочетаниями клавиш и интерфейсом программы Visual Studio Code в операционной системе macOS. Среды Visual Studio Code для операционных систем Windows и Linux практически идентичны, однако комбинации клавиш, скорее всего, будут отличаться.
В табл. 1.2 перечислены некоторые распространенные сочетания клавиш.
Таблица 1.2
Действие
В macOS
В Windows
Отобразить панель команд
Cmd+Shift+P,
F1
Ctrl+Shift+P,
F1
Переход к определению
F12
F12
Назад
Ctrl+–
Alt+←
Далее
Ctrl+Shift+–
Alt+→
Отобразить терминал
Ctrl+’
Ctrl+’
Новый терминал
Ctrl+Shift+’
Ctrl+Shift+’
Переключить на строчный комментарий
Ctrl+/
Ctrl+/
Переключить на блочный комментарий
Shift+Option+A
Shift+Alt+A
Я рекомендую вам скачать PDF-файл, в котором описаны сочетания клавиш для вашей операционной системы:
• Windows: code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf;
• macOS: code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf;
• Linux: code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf.
Узнать о привязках клавиш по умолчанию для Visual Studio Code и о том, как их настроить, можно на сайте code.visualstudio.com/docs/getstarted/keybindings.
Среда разработки Visual Studio Code совершенствовалась последние несколько лет благодаря компании Microsoft. Существует также версия Insiders, которая постоянно обновляется.
Теперь вы готовы скачать и установить среду Visual Studio Code, ее расширение C#, среду .NET Core 3.0 и пакет SDK.
1. Скачайте и установите либо стабильную версию Stable, либо версию Insiders среды Visual Studio Code, перейдя по ссылке code.visualstudio.com.
2. Скачайте и установите среду .NET Core и пакет SDK, перейдя по ссылке www.microsoft.com/net/download.
3. Для установки расширения C# вам необходимо сначала запустить приложение Visual Studio Code.
4. В Visual Studio Code нажмите значок Extensions (Расширения) или выберите View—>Extensions (Вид—>Расширения).
5. C# — одно из самых популярных доступных расширений, поэтому вы должны увидеть его в верхней части списка или можете ввести C# в поле поиска, как показано на рис. 1.1.
Рис. 1.1
6. Нажмите кнопку Install (Установить) и дождитесь скачивания и установки пакета.
Более подробно о поддержке средой разработки Visual Studio Code языка C# можно узнать на сайте code.visualstudio.com/docs/languages/csharp.
В последующих главах этой книги вы будете использовать дополнительные расширения. В табл. 1.3 представлен их перечень.
Таблица 1.3
Расширение
Описание
C# для Visual Studio Code
(работает на OmniSharp)
мс-vscode.csharp
Поддержка редактирования C#, включая подсветку синтаксиса, IntelliSense, переход к определению, поиск ссылок, поддержка отладки для .NET Core (CoreCLR) и проектов project.json и csproj для операционных систем Windows, macOS и Linux
Документация XML в языке C#.
Комментарии k--kato.docomment
Создание комментариев документации XML для Visual Studio Code
Расширения C#
jchannon.csharpextensions
Добавление класса C#, интерфейса C#, поля и свойства из конструкторов, конструктора из свойств
REST-клиент
humao.rest-client
Отправка HTTP-запроса и просмотр ответа непосредственно в Visual Studio Code
Декомпилятор ILSpy .NET
icsharpcode.ilspy-vscode
Декомпиляция сборки MSIL — поддержка среды .NET Framework, .NET Core и .NET Standard
SharpPad
jmazouri.sharppad
Проверка результатов вашего кода. Код работает аналогично таким инструментам, как LinqPad и RoslynPad
.NET Framework, .NET Core, Xamarin и .NET Standard — связанные и зависимые друг от друга платформы для разработки приложений и сервисов. В данном разделе я познакомлю вас с каждой из этих платформ .NET.
.NET Framework — платформа для разработки, включающая общеязыковую исполняющую среду (Common Language Runtime, CLR), которая управляет выполнением кода, и обширную библиотеку базовых классов (Base Class Library, BCL) для создания приложений. Платформа .NET Framework изначально проектировалась как кросс-платформенная, но впоследствии компания Microsoft сконцентрировалась на внедрении платформы и обеспечении максимально эффективной работы в операционной системе Windows.
Платформа версии .NET Framework 4.5.2 и более поздних версий — официальный компонент операционной системы Windows. .NET Framework установлена на более чем одном миллиарде компьютеров, ввиду чего должна обновляться как можно реже. Даже исправление неполадок могут вызвать проблемы, поэтому данная платформа обновляется нечасто.
Все приложения на компьютере, разработанные для .NET Framework, используют одну и ту же версию CLR и библиотек, хранящихся в глобальном кэше сборок (Global Assembly Cache, GAC), что может привести к неполадкам, если некоторым из них потребуется определенная версия для совместимости.
В сущности, платформа .NET Framework работает только в среде Windows и считается устаревшей. Не рекомендуется использовать данную платформу для создания новых приложений.
Сторонние разработчики создали .NET-проект под названием Mono. Хоть он и был кросс-платформенным, он значительно отставал от официальной реализации .NET Framework.
Более подробную информацию о проекте Mono можно найти на сайте www.mono-project.com.
Проект Mono занял нишу в качестве основы мобильной платформы Xamarin, а также кросс-платформенных платформ для разработки игр, таких как Unity.
Более подробную информацию о Unity можно получить на сайте docs.unity3d.com.
В 2016 году корпорация Microsoft приобрела компанию Xamarin и теперь бесплатно предоставляет пользователям дорогостоящее решение Xamarin в качестве расширения для среды разработки Visual Studio 2019. Кроме того, корпорация переименовала инструментарий для разработчика Xamarin Studio в Visual Studioдля Mac и внедрила возможность создавать другие типы приложений. В Visual Studio 2019 для Mac корпорация Microsoft заменила части редактора Xamarin Studio на части из Visual Studio для Windows, чтобы обеспечить знакомый пользовательский опыт и производительность.
Сегодня мы живем в реально кросс-платформенном мире. Современные методы мобильной и облачной разработки уменьшили прежнюю значимость операционной системы Windows. Поэтому Microsoft активно работает над отделением платформы .NET от Windows, прерыванием их тесных связей. Переписывая код .NET для обеспечения истинной кросс-платформенности, сотрудники корпорации воспользовались моментом, чтобы реорганизовать компоненты .NET и удалить те из них, которые не считаются ядром.
В итоге свет увидел новый продукт — .NET Core, включающий кросс-платформенную реализацию рабочей общеязыковой исполняющей среды под названием CoreCLR и набор библиотек классов CoreFX.
Скотт Хантер, директор .NET-подразделения Microsoft, утверждает: «Сорок процентов пользователей .NET Core — новые разработчики. Мы хотим привлекать новых людей».
Платформа .NET Core быстро развивается и ввиду возможности ее развертывания рядом с приложением может часто меняться, и эти изменения не повлияют на другие приложения .NET Core на той же машине. Обновления, которые Microsoft может внести в .NET Core, нельзя добавить в .NET Framework.
Узнать больше о позиционировании Microsoft .NET Core и .NET Framework можно на сайте devblogs.microsoft.com/dotnet/update-on-net-core-3-0-and-net-framework-4-8/.
На конференции разработчиков Microsoft Build в мае 2019 года команда .NET объявила, что после выпуска .NET Core 3.0 в сентябре 2019 года .NET Core будет переименована в .NET, а в номере основной версии будет пропущен номер 4, чтобы избежать путаницы с NET Framework 4.x. Итак, следующей версией .NET Core будет версия .NET 5.0, выпуск которой запланирован на ноябрь 2020 года. После этого корпорация Microsoft планирует выпускать ежегодные основные версии каждый ноябрь, подобно тому как Apple выпускает основные версии iOS каждую вторую неделю в сентябре.
Более подробную информацию о планах корпорации Microsoft, касающихся версии .NET 5.0, можно найти на сайте devblogs.microsoft.com/dotnet/introducing-net-5/.
В табл. 1.4 показано, когда были выпущены основные версии .NET Core, когда запланированы будущие выпуски и какая версия используется в этой книге.
Таблица 1.4
Версия
Дата выпуска
Издание
Выпуск
.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
Октябрь 2017 года
Третье
Ноябрь 2017 года
.NET Core 2.1
Май 2018 года
.NET Core 2.2
Декабрь 2018 года
.NET Core 3.0
Сентябрь 2019 года
Четвертое
Октябрь 2019 года
.NET Core 3.1 (текущая версия)
Декабрь 2019 года
Декабрь 2019 года
.NET 5.0
Ноябрь 2020 года
.NET 6.0
Ноябрь 2021 года
Я не могу обещать, что 5-е и 6-е издания этой книги будут соответствовать будущим выпускам .NET.
Версии .NET Core сопровождаются либо долгосрочной поддержкой (long term support, LTS), либо текущей (current), как описано ниже.
• Релизы LTS стабильны и требуют меньше обновлений в течение срока их службы. Это хороший выбор для приложений, не требующих частых обновлений. Релизы LTS будут поддерживаться в течение трех лет после их выпуска. .NET Core 3.1 будет выпуском LTS.
Версии .NET Core 1.0 и 1.1 достигли конца срока службы и прекратили поддержку 27 июня 2019 года через три года после первоначального выпуска .NET Core 1.0.
• Текущие релизы включают функции, которые могут меняться в зависимости от обратной связи. Это хороший выбор для активно разрабатываемых приложений, поскольку они предоставляют доступ к последним обновлениям. После трех месяцев обслуживания предыдущая вспомогательная версия больше не будет поддерживаться. Например, после выпуска версии 1.2 у систем, работающих с версией 1.1, будет три месяца на обновление до версии 1.2, чтобы пользоваться поддержкой. Версия .NET Core 3.0 — текущий релиз, поэтому если вы еще не обновились хотя бы до .NET Core 3.1, необходимо сделать это как можно скорее.
В целях обеспечения безопасности и надежности критические обновления безопасности и надежности поставляются для релизов независимо от режима поддержки. Для получения поддержки вы всегда должны быть в курсе последних обновлений. Например, если система работает под версией 1.0, а версия 1.0.1 уже выпущена, то, значит, необходимо установить версию 1.0.1.
.NET Core менее объемна, чем текущая версия .NET Framework, из-за того, что устаревшие технологии были удалены. Например, Windows Forms и Windows Presentation Foundation (WPF) можно использовать для создания приложений с графическим интерфейсом пользователя (graphical user interface, GUI), однако они тесно связаны с экосистемой операционной системы Windows, поэтому были удалены из .NET Core в операционных системах macOS и Linux.
Одна из новых функций .NET Core 3.0 — поддержка запуска старых приложений Windows Forms и WPF с помощью пакета Windows Desktop Pack, входящего в состав версии .NET Core 3.0 для операционной системы Windows, поэтому он считается более полным, чем пакет SDK для операционных систем macOS и Linux. При необходимости вы можете внести небольшие изменения в устаревшее приложение Windows, а затем перестроить его для .NET Core, чтобы воспользоваться новыми функциями и обновлениями. О поддержке разработки таких типов приложений Windows вы узнаете в главе 20.
Универсальная платформа Windows (Universal Windows Platform, UWP) — последняя технология, применяемая для создания Windows-приложений, построенная на измененной версии .NET Core. Платформа UWP не входит в состав .NET Core, поскольку не считается кросс-платформенной.
Компоненты ASP.NET Web Forms и Windows Communication Foundation (WCF) представляют собой устаревшие технологии для создания веб-приложений и сервисов, используемые сегодня лишь некоторыми разработчиками, ввиду чего эти компоненты также были удалены из .NET Core. Вместо этого разработчики предпочитают задействовать компоненты ASP.NET MVC и ASP.NET Web-API. Обе технологии были реорганизованы и объединены в новый продукт, ASP.NET Core, работающий на платформе .NET Core. Вы узнаете о них в главах 15, 16 и 18.
Некоторые разработчики .NET Framework озабочены тем, что в .NET Core отсутствуют веб-формы ASP.NET, WCF и Windows Work Flow (WF) и надеются, что корпорация Microsoft пересмотрит данный вопрос. Существуют проекты с открытым исходным кодом, позволяющие WCF и WF перейти на .NET Core. Более подробную информацию можно найти на сайте devblogs.microsoft.com/dotnet/supporting-the-community-with-wf-and-wcf-oss-projects/.
Entity Framework (EF)6 — технология объектно-реляционного отображения для работы с информацией, хранящейся в реляционных базах данных, таких как Oracle и Microsoft SQL Server. За годы развития данная технология погрязла в различных доработках, поэтому ее новый кросс-платформенный API был оптимизирован и стал поддерживать такие нереляционные базы данных, как Microsoft Azure Cosmos DB. Теперь технология называется Entity Framework Core. Об этом вы узнаете в главе 11.
Если у вас есть приложения, использующие устаревший EF, то его версия .NET поддерживается в .NET Core 3.0.
Помимо удаления значительных частей из .NET Framework для создания .NET Core, Microsoft разделила .NET Core на пакеты NuGet, представляющие собой небольшие функциональные части, которые можно развернуть независимо.
Основная цель корпорации Microsoft — не делать ядро .NET меньше, чем .NET Framework. Цель состоит в том, чтобы разбить .NET Core на компоненты для поддержки современных технологий и уменьшения числа зависимостей. Тогда для развертывания нужны будут только те пакеты, которые необходимы вашему приложению.
В 2019 году с платформой .NET сложилась следующая ситуация: существует три ветви платформы .NET, все из которых разрабатываются корпорацией Microsoft:
• .NET Core — для кросс-платформенных и новых приложений;
• .NET Framework — для устаревших приложений;
• Xamarin — для мобильных приложений.
Все они имеют свои достоинства и недостатки, поскольку предназначены для разных ситуаций. Это привело к тому, что разработчик должен изучить три платформы, каждая из которых раздражает своими странностями и ограничениями. По этой причине Microsoft работает над .NET Standard: спецификацией для набора API, которая может быть реализована на всех платформах .NET. Например, указанием на наличие базовой поддержки является совместимость платформы с .NET Standard 1.4.
В рамках .NET Standard 2.0 и более поздних версий корпорация Microsoft привела все три платформы в соответствие с современным минимальным стандартом, что значительно упростило разработчикам совместное использование кода с любой разновидностью .NET.
Это позволило добавить в .NET Core 2.0 и более поздние версии ряд недостающих API, необходимых разработчикам для переноса старого кода, написанного для .NET Framework, в кросс-платформенный .NET Core. Однако некоторые API уже реализованы, но при работе выдают исключение о том, что фактически не должны использоваться! Обычно это происходит из-за различий в операционной системе, в которой вы запускаете .NET Core. Как обрабатывать эти исключения, вы узнаете в главе 2.
Важно понимать, что .NET Standard — это просто стандарт. Вы не можете установить .NET Standard так же, как не можете установить HTML5. Чтобы использовать HTML5, вам необходимо установить браузер, который реализует стандарт HTML5.
Чтобы использовать .NET Standard, необходимо установить платформу .NET, которая реализует спецификацию .NET Standard. .NET Standard 2.0 реализована в последних версиях .NET Framework, .NET Core и Xamarin.
Последняя версия .NET Standard 2.1 реализована только в .NET Core 3.0, Mono и Xamarin. Для некоторых функций C# 8.0 требуется .NET Standard 2.1. Она не реализована в .NET Framework 4.8, поэтому мы рассматриваем .NET Framework как устаревшую.
Версии .NET Standard и поддерживаемые ими платформы .NET перечислены на сайте github.com/dotnet/standard/blob/master/docs/versions.md.
В первом издании этой книги, написанном в марте 2016 года, я сосредоточился на функциональности .NET Core, но использовал .NET Framework, когда важные или полезные функции еще не были реализованы в .NET Core, поскольку это было еще до окончательного выпуска .NET Core 1.0. Visual Studio 2015 использовался для большинства примеров, Visual Studio Code описывался кратко.
Во втором издании все примеры кода .NET Framework были (почти) полностью убраны, чтобы читатели могли сосредоточиться на примерах .NET Core, которые действительно работают кросс-платформенно. Третье издание завершило переход. Оно было переписано так, чтобы весь код .NET Core был чистым. Но предоставление пошаговых инструкций для нескольких инструментов привело к ненужному усложнению.
В этом, четвертом, издании я продолжу тенденцию, показывая только примеры кодирования с использованием Visual Studio Code для всех глав, кроме двух последних. В главе 20 вам необходимо задействовать Visual Studio 2019, работающую в операционной системе Windows 10, а в главе 21 — Visual Studio 2019 для Mac.
Компилятор C# (под названием Roslyn), используемый инструментом командной строки dotnet, конвертирует ваш исходный код на языке C# в код на промежуточном языке (Intermediate Language, IL) и сохраняет его в сборке (DLL- или EXE-файле). Операторы кода на промежуточном языке (IL) похожи на код ассемблера, только выполняются с помощью виртуальной машины CoreCLR в .NET Core.
В процессе работы код IL загружается CoreCLR из сборки, динамически (Just-in-Time, JIT) компилируется компилятором в собственные инструкции CPU, а затем исполняется с помощью CPU на вашем компьютере. Преимущество такого трехэтапного процесса компиляции заключается в том, что Microsoft может создавать CLR не только для Windows, но и для Linux и macOS. Один и тот же код IL запускается в любой среде благодаря второму процессу компиляции, который генерирует код для конкретной операционной системы и набора команд CPU.
Независимо от того, на каком языке написан исходный код, например C#, Visual Basic или F#, все приложения .NET используют код IL для своих инструкций, хранящихся в сборке. Корпорация Microsoft и другие предоставляют инструменты дизассемблера, которые могут открывать сборку и раскрывать данный код IL, например расширение декомпилятора ILSpy .NET.
Технология .NET Native — еще одна инициатива в области .NET. С ее помощью код на языке C# компилируется в машинный код методом компиляции перед исполнением (ahead-of-time, AoT) вместо общеязыковой исполняющей среды, использующейся для динамической компиляции (just-in-time, JIT) в промежуточный язык IL, и только потом в машинный язык.
Технология .NET Native улучшает скорость выполнения приложений и уменьшает объемы выделяемой приложению памяти за счет генерации нативного кода во время сборки и последующего его развертывания вместо промежуточного кода.
Более подробную информацию о .NET Native можно найти на сайте github.com/dotnet/corert/blob/master/Documentation/intro-to-corert.md.
В табл. 1.5 перечисляются и сравниваются технологии .NET.
Таблица 1.5
Технология
Возможности
Хостовая ОС
.NET Core
Современный набор функций, полная поддержка C# 8.0, портирование существующих и создание новых приложений для Windows и веб-приложений и сервисов
Windows, macOS, Linux
.NET Framework
Устаревший набор функций, ограниченная поддержка C# 8.0, поддержка существующих приложений
Только Windows
Xamarin
Только для мобильных устройств
Android, iOS, macOS
Корпорация Microsoft обещает, что к концу 2020 года вместо трех будет одна платформа .NET. Планируется, что в .NET 5.0 будет одна библиотека BCL и две среды выполнения: одна оптимизирована для серверных или офисных сценариев, таких как сайты и офисные приложения Windows, основанные на среде выполнения .NET Core, а другая — для мобильных приложений на основе среды Xamarin.
Цель данного раздела — разработка консольных приложений с помощью среды разработки Visual Studio Code. Инструкции и снимки экрана в этом разделе относятся к операционной системе macOS, но те же действия будут работать с Visual Studio Code в операционных системах Windows и Linux.
Основными отличиями послужат собственные действия командной строки, такие как удаление файла: как команда, так и путь, вероятно, будут разными для операционных систем Windows или macOS и Linux. Однако инструмент командной строки dotnet будет одинаковым на всех платформах.
Начнем писать код!
1. Запустите среду разработки Visual Studio Code.
2. В операционной системе macOS выберите File—>Open (Файл—>Открыть) или нажмите сочетание клавиш Cmd+O. В операционной системе Windows выберите File—>Open Folder (Файл—>Открыть папку) или нажмите сочетание клавиш Ctrl+K Ctrl+O. В обеих операционных системах вы можете нажать кнопку Open Folder (Открыть папку) на панели EXPLORER (Проводник) или щелкнуть кнопкой мыши на ссылке Open Folder (Открыть папку) на странице приветствия, как показано на рис. 1.2.
Рис. 1.2
3. В открывшемся диалоговом окне перейдите к своей пользовательской папке в macOS (моя папка называется markjprice), к папке Documents в операционной системе Windows или к любому каталогу или диску, на котором хотите сохранить свои проекты.
4. Нажмите кнопку New Folder (Новая папка) и назовите папку Code.
5. В папке Code создайте подпапку Chapter01.
6. В папке Chapter01 создайте подпапку HelloCS.
7. Выберите папку HelloCS и нажмите кнопку Open (Открыть) в системе macOS или Select Folder (Выбрать папку) в системе Windows.
8. Выберите View—>Terminal (Вид—>Терминал) или в системе macOS нажмите сочетание клавиш Ctrl+` (обратный апостроф) и в системе Windows нажмите Ctrl+' (одинарная кавычка). В операционной системе Windows вводит в заблуждение комбинация клавиш Ctrl+` (обратный апостроф), которая разделяет текущее окно!
9. На панели TERMINAL (Терминал) введите следующую команду:
dotnet new console
10. Вы увидите, что инструмент командной строки dotnet создает в текущей папке проект ConsoleApplication, а на панели EXPLORER (Проводник) отображаются два созданных файла, HelloCS.proj и Program.cs, как показано на рис. 1.3.
Рис. 1.3
11. На панели EXPLORER (Проводник) выберите файл Program.cs, чтобы открыть его в окне редактора. При первом выполнении Visual Studio Code, возможно, придется загружать и устанавливать зависимые объекты C#, такие как OmniSharp, Razor Language Server и отладчик .NET Core, если это не было сделано при установке расширения C#.
12. Если вы видите предупреждение о том, что необходимые ресурсы отсутствуют, то нажмите кнопку Yes (Да), как показано на рис. 1.4.
Рис. 1.4
13. Через несколько секунд на панели EXPLORER (Проводник) появится папка .vscode. Более подробно о ней вы узнаете в главе 4.
14. В файле Program.cs измените строку 9 так, чтобы текст, который выводится в консоль, сообщал: Hello, C#!.
15. Выберите File—>Auto Save (Файл—>Автосохранение). Она избавит вас от необходимости каждый раз вспоминать о сохранении перед повторным обновлением приложения.
Следующая задача — это компиляция и запуск кода.
1. Выберите View—>Terminal (Вид—>Терминал) и введите следующую команду:
dotnet run
2. На панели TERMINAL (Терминал) отобразится результат запуска вашего приложения, как показано на рис. 1.5.
Рис. 1.5
Git — широкоиспользуемая система управления исходным кодом. GitHub — компания, веб-сайт и настольное приложение, которое облегчает работу с Git. Корпорация Microsoft недавно приобрела GitHub, поэтому интеграция GitHub с инструментами Microsoft будет усиливаться.
Я использовал веб-сервис GitHub для хранения ответов ко всем упражнениям, приведенным в конце каждой главы этой книги. Получить к ним доступ можно по ссылке github.com/markjprice/cs8dotnetcore3.
Среда разработки Visual Studio Code имеет встроенную поддержку системы Git, но требует установки Git в используемой операционной системе, поэтому вам необходимо установить Git 2.0 или более позднюю версию, прежде чем получить доступ к этим функциям. Вы можете скачать дистрибутив Git по ссылке git-scm.com/download.
Если хотите использовать графический интерфейс, то можете скачать GitHub Desktop по ссылке desktop.github.com.
Клонируем репозиторий с примерами из книги.
1. Создайте папку Repos в пользовательской папке, или папке Documents, или там, где вы хотите хранить свои репозитории Git.
2. В программе Visual Studio Code откройте папку Repos.
3. Выберите View—>Terminal (Вид—>Терминал) и введите следующую команду:
git clone https://github.com/markjprice/cs8dotnetcore3.git
4. Клонирование всех решений для всех глав займет примерно минуту, как показано на рис. 1.6.
Дополнительную информацию об управлении версиями исходного кода с помощью Visual Studio Code можно получить на сайте code.visualstudio.com/Docs/editor/versioncontrol.
Рис. 1.6
Этот раздел главы посвящен тому, как найти достоверную информацию о программировании в Интернете.
Главным ресурсом, позволяющим получить справочные сведения об инструментах и платформах Microsoft, ранее был Microsoft Developer Network (MSDN). Теперь это Microsoft Docs, и вы можете найти его по адресу docs.microsoft.com/ru-ru/.
В командной строке вы можете запросить справочную информацию об инструменте dotnet.
1. Чтобы открыть в окне браузера официальную документацию для команды dotnetnew, введите в командной строке или на панели TERMINAL (Терминал) программы Visual Studio Code следующую команду:
dotnet help new
2. Чтобы вывести справочную информацию в командной строке, используйте ключ -h или --help, как показано ниже:
dotnet new console -h
3. Вы увидите следующий вывод (фрагмент):
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:
--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
* Indicates the value used if the switch is provided without a value.
Одна из наиболее полезных клавиш в Visual Studio Code — F12 для перехода к определению. Нажав эту клавишу, вы увидите, как выглядит общедоступное определение типа или элемента, полученное при чтении метаданных в скомпилированной сборке. Некоторые инструменты, такие как ILSpy .NET Decompiler, могут даже выполнить реверс-инжиниринг метаданных и кода IL в C#.
1. В программе Visual Studio Code откройте папку HelloCS.
2. В файле Program.cs в методе Main введите следующий код, чтобы объявить целочисленную переменную z:
int z;
Щелкните на слове int, а затем нажмите клавишу F12 или щелкните правой кнопкой мыши и выберите пункт Go To Definition (Перейти к определению) в контекстном меню. В появившемся окне вы можете увидеть определение типа данных int, как показано на рис. 1.7.
Рис. 1.7
Вы можете видеть, что int:
• определяется с помощью ключевого слова struct;
• находится в сборке System.Runtime;
• находится в пространстве имен System;
• называется Int32;
• является псевдонимом для типа System.Int32;
• реализует интерфейсы, такие как IComparable;
• имеет постоянные значения для своих максимальных и минимальных значений;
• имеет такие методы, как Parse.
При попытке использовать команду Go To Definition (Перейти к определению) иногда появляется сообщение об ошибке No definition found (Определение не найдено). Это связано с тем, что расширение C# «не знает» о текущем проекте. Выберите View—>Command Palette (Вид—>Палитра команд), найдите пункт OmniSharp:Select Project и выберите его, а затем и правильный проект, с которым вы хотите работать.
В настоящее время функция Go To Definition (Перейти к определению)не очень полезна для вас, поскольку вы еще не знаете, что означают эти термины.
К концу первой части книги, в которой рассказывается о C#, вы будете знать достаточно, чтобы эта функция стала полезной.
3. Прокрутите окно редактора кода вниз, чтобы найти метод Parse с параметром string, начинающимся со строки 86, как показано на рис. 1.8.
Рис. 1.8
В комментарии вы увидите, что Microsoft задокументировала возникшие при вызове этого метода исключения, включая ArgumentNullException, FormatException и OverflowException. Теперь мы знаем, что нам необходимо обернуть вызов данного метода в оператор try и какие исключения необходимо перехватить.
Я надеюсь, вам уже не терпится узнать, что все это значит! Наберитесь терпения! Вы почти дошли до конца главы и уже в следующей главе погрузитесь в детали языка C#. Но сначала посмотрим, куда еще вы можете обратиться за получением справочной информации.
StackOverflow — самый популярный сторонний сайт, на котором можно найти ответы на сложные вопросы по программированию. Он настолько популярен, что поисковые системы, такие как DuckDuckGo, поддерживают специальный режим поиска на этом сайте.
1. Запустите браузер.
2. Перейдите на сайт DuckDuckGo.com и введите такой запрос:
!so securestring
Результаты отображены на рис. 1.9.
Рис. 1.9
Вы можете выполнять поиск на сайте Google, задавая дополнительные настройки, чтобы увеличить вероятность нахождения нужной информации.
1. Перейдите в Google.
2. Например, если вы ищете в Google информацию о garbagecollection с помощью обычного запроса, то увидите ссылку на термин в «Википедии», а также список коммунальных служб, как показано на рис. 1.10.
Рис. 1.10
3. Повысить эффективность поиска можно, ограничив его полезным сайтом, например StackOverflow, и удалив языки, которые могут быть неактуальны в момент поиска, такие как C++, Rust и Python, или добавив C# и .NET, как показано в следующем поисковом запросе:
garbage collection site:stackoverflow.com +C# -Java
Отличный блог, на который рекомендую подписаться, чтобы быть в курсе новостей .NET. Его ведут группы разработчиков .NET. Доступен по адресу blogs.msdn.microsoft.com/dotnet/.
Проверим полученные знания. Для этого ответьте на несколько вопросов, выполните приведенные задания и посетите указанные ресурсы, чтобы получить дополнительную информацию.
Постарайтесь ответить на следующие вопросы, обращая внимание на то, что, невзирая на возможность найти большинство ответов в этой главе, для ответов на другие вопросы потребуется провести некоторые онлайн-исследования или написать код.
1. Почему на платформе .NET Core для разработки приложений программисты могут использовать разные языки, например C# и F#?
2. Какие команды нужно ввести для создания консольного приложения?
3. Какие команды нужно ввести в окне консоли для сборки и запуска исходного кода на языке C#?
4. Какое сочетание клавиш используется для открытия в программе Visual Studio Code панели TERMINAL (Терминал)?
5. Среда разработки Visual Studio 2019 превосходит Visual Studio Code?
6. Платформа .NET Core лучше .NET Framework?
7. Что такое .NET Standard и почему он так важен?
8. Как называется метод точки входа консольного приложения .NET и как его объявить?
9. Как найти справочную информацию по ключевому слову в C#?
10. Как найти решения общих проблем программирования?
Вам не нужно устанавливать среду разработки Visual Studio Code, Visual Studio 2019 или Visual Studio 2019 для Mac, чтобы практиковаться в программировании на языке C#. Посетите сайт .NET Fiddle — dotnetfiddle.net — и начните кодирование в онлайн-режиме.
Корпорация Microsoft также работает над созданием онлайн-версии Visual Studio Code, которая может работать в любом браузере, однако в настоящее время она доступна только в деморежиме. После релиза версия будет доступна всем по следующей ссылке: online.visualstudio.com.
Посетите следующие сайты, чтобы получить дополнительную информацию по темам, рассмотренным в этой главе:
• знакомство с .NET Core: dotnet.github.io;
• инструменты интерфейса командной строки (CLI) .NET Core: aka.ms/dotnet-cli-docs;
• CoreCLR, общеязыковая исполняющая среда .NET Core: github.com/dotnet/coreclr/;
• путеводитель по .NET Core: github.com/dotnet/core/blob/master/roadmap.md;
• часто задаваемые вопросы о .NET Standard: github.com/dotnet/standard/blob/master/docs/faq.md;
• Stack Overflow: stackoverflow.com;
• расширенный поиск Google: www.google.com/advanced_search;
• виртуальная академия Microsoft: mva.microsoft.com;
• Microsoft Channel 9: видеоуроки для разработчиков: channel9.msdn.com.
В этой главе мы настроили среду разработки, обсудили различия между .NET Framework, .NET Core, Xamarin и .NET Standard, вы научились пользоваться средами разработки Visual Studio Code и .NET Core SDK для создания простого консольного приложения. Кроме того, вы узнали, как загрузить код решения из данной книги из репозитория GitHub и, что наиболее важно, научились находить справочную информацию.
В следующей главе вы научитесь изъясняться на языке C#.