C# — c# VS код работает через f11 но не работает через f5


Содержание

Отладка кода в Visual Studio

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы познакомились с ключевыми словами ref и out в C#. В данной статье я бы хотел немного поговорить про отладку кода в Visual Studio.

В состав Visual Studio входит мощный отладчик, который позволяет расставлять точки остановки ( breakpoints ), запускать программу под этим отладчиком, пошагово её отлаживать. Пошагово можно отлаживать каждый оператор, можно отлаживать, входя в какой-то метод или не входя в метод. В любой момент можно посмотреть значение локальной переменной, вычислить какое-нибудь выражение. Можно посмотреть стек вызовов. Давайте на каком-нибудь примере разберем, как отлаживать код в Visual Studio :

Давайте поставим точку остановки. Это можно сделать двумя путями. Нажать клавишу «F9» , и на той строке, на которой находится курсор, будет точка остановки. Также можно нажать слева от строки на помеченную область:

Теперь можно запустить программу, и на брейкпойнте она остановится. Но остановка произойдёт только в том случае, если вы запустили программу под отладчиком. Самый простой способ запустить программу под отладчиком – это нажать клавишу F5 , а не Ctrl + F5 . Можно также через контекстное меню Debug :

Когда программа дойдёт до брейкпойнта, то её выполнение приостановится. Точка, на которой сейчас происходит выполнение программы, выделяется желтым цветом:

Пока программа приостановлена, можно посмотреть значение переменных. В Autos заносятся переменные автоматически, в Locals находятся локальные переменные, в Watch можно самим что-нибудь набрать (я набрал i*3 и i*5 ) и посмотреть результаты:

После этого можно нажать F5 и выполнение программы пойдёт дальше (или к следующему брейкпойнту, если такой имеется). В нашем случае программа перейдёт к следующему, так как у нас организован цикл. Также можно выполнить отладку по шагам. F10 – выполнить шаг без захода в метод (функцию), F11 – выполнить шаг с заходом в метод (функцию).

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

В данной небольшой статье вы узнали как просто можно отлаживать код в Visual Studio

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

Обработка исключений

Конструкция try..catch..finally

Иногда при выполнении программы возникают ошибки, которые трудно предусмотреть или предвидеть, а иногда и вовсе невозможно. Например, при передачи файла по сети может неожиданно оборваться сетевое подключение. такие ситуации называются исключениями . Язык C# предоставляет разработчикам возможности для обработки таких ситуаций. Для этого в C# предназначена конструкция try. catch. finally .

При использовании блока try. catch..finally вначале выполняются все инструкции в блоке try . Если в этом блоке не возникло исключений, то после его выполнения начинает выполняться блок finally . И затем конструкция try..catch..finally завершает свою работу.

Если же в блоке try вдруг возникает исключение, то обычный порядок выполнения останавливается, и среда CLR начинает искать блок catch , который может обработать данное исключение. Если нужный блок catch найден, то он выполняется, и после его завершения выполняется блок finally.

Если нужный блок catch не найден, то при возникновении исключения программа аварийно завершает свое выполнение.

Рассмотрим следующий пример:

В данном случае происходит деление числа на 0, что приведет к генерации исключения. И при запуске приложения в режиме отладки мы увидим в Visual Studio окошко, которое информирует об исключении:

В этом окошке мы видим, что возникло исключение, которое представляет тип System.DivideByZeroException , то есть попытка деления на ноль. С помощью пункта View Details можно посмотреть более детальную информацию об исключении.

И в этом случае единственное, что нам остается, это завершить выполнение программы.

Чтобы избежать подобного аварийного завершения программы, следует использовать для обработки исключений конструкцию try. catch. finally . Так, перепишем пример следующим образом:

В данном случае у нас опять же возникнет исключение в блоке try, так как мы пытаемся разделить на ноль. И дойдя до строки

выполнение программы остановится. CLR найдет блок catch и передаст управление этому блоку.

После блока catch будет выполняться блок finally.

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

Следует отметить, что в этой конструкции обязателен блок try . При наличии блока catch мы можем опустить блок finally:

И, наоборот, при наличии блока finally мы можем опустить блок catch и не обрабатывать исключение:

Однако, хотя с точки зрения синтаксиса C# такая конструкция вполне корректна, тем не менее, поскольку CLR не сможет найти нужный блок catch, то исключение не будет обработано, и программа аварийно завершится.

Обработка исключений и условные конструкции

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

Если пользователь введет не число, а строку, какие-то другие символы, то программа выпадет в ошибку. С одной стороны, здесь как раз та ситуация, когда можно применить блок try..catch , чтобы обработать возможную ошибку. Однако гораздо оптимальнее было бы проверить допустимость преобразования:

Метод Int32.TryParse() возвращает true , если преобразование можно осуществить, и false — если нельзя. При допустимости преобразования переменная x будет содержать введенное число. Так, не используя try. catch можно обработать возможную исключительную ситуацию.

С точки зрения производительности использование блоков try..catch более накладно, чем применение условных конструкций. Поэтому по возможности вместо try..catch лучше использовать условные конструкции на проверку исключительных ситуаций.

Горячие клавиши в Visual Studio

Сюда буду добавлять горячие клавиши в Visual Studio, способы быстрого ввода и прочие фишки, позволяющие кодить более комфортно.

Начнем с самого простого, что бывает нужно начинающему программисту:
cw + 2 раза Tab = Console.WriteLine();

Далее материалы статьи с Хабра, где-то с моими дополнениями, но в основном в чистом виде:

Комментирование

Ctrl+K,C — закомментировать выбранные линии в коде.
Ctrl+K,U — раскомментировать выбранные линии в коде.

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

Поиск

Ctrl+F — открывается стандартное окно поиска, если в буфер недавно было скопирован текст, то он автоматически подставиться.
Ctrl+F3 — поиск «активного» текста вниз (который выделен или слово на котором стоит курсор), без копирования в буфер обмена.
Ctrl+Shift+F3 — поиск «активного» текста вверх.
Ctrl+I — и начинаете печатать текст, этакий runtime поиск.

Вызов базового джина

Вам лень писать текст полностью?! Скорость выпадающего Intellisence не устраивает несущуюся впереди вас вашу мысль?!
Тогда самое время применить следующии комбинации:
Ctrl+Space — вызов Intellisence с показом «слов»
Ctrl+J — если вы подзабыли название метода класса или его свойсто, то эта комбинация вам поможет. Можно применять и предыдущую, но эта более «умная».
Ctrl+K, X — показ всех сниппетов, которые у вас есть, в виде выпадающего списка, использование интуитивно понятно ��
короткое_имя_снипета+Tab — использовать сниппет в коде.

Тут стоит сказать отдельно и довольно много, навигация очень удобная, особенно когда привыкаешь ��
F12 — перейти к определению/объявлению класса/метода/свойства. Очень применимо если вам вдруг стало интересно, а реализуется ли этой переменной, этого класса тип интерфейс IDisposable; или вы ищите в коде, «а где же объявляется эта переменная».
Ctrl+G — перейти на определённый номер строки в коде. (Отображение номеров строк можно включить: Text Editor -> Интересующий вас язык -> Display -> Line numbers — выставить галку). Иногда довольно удобно, особенно если получаете описание необработанного исключения, а там указан, как правило, номер строки.
Ctrl+] — когда курсор установлен на скобку, многострочный комментарий (/* */), регион (#region), строку, обрамлённую кавычками, эта комбинация позволит вам увидеть начало и окончание этих «блоков», перемещая курсор между ними.
Ctrl+M, M — я человек довольно ленивый и мне сложно заставить долго тыкать мышкой по ±, сворачиваю и разворачия «блоки», поэтому рекомендую данную комбинацию
Ctr+M, O — комбинация аналогичная предыдущей, только сворачивает все блоки
Ctrl+- — переход к предыдущему активному тексту (тому который вы редактировали)
Ctrl+Shift+- — переход к следующему активному тексту, если он конечно есть ��

Если обратите внимание то студия, по своей природе MDI, значит должна быть возможность перемещаться, между окнами:
Ctrl+Tab — аналог Alt+Tab в Windows, только применимо к студии.

Очень удобным инструментом в студии являются закладки, да-да, по аналогии с книжными. Можно отметить код чтобы потом перейти к нему:
Ctrl+B, T — поставить/снять закладку.
Ctrl+B, Ctrl+C — удалить все закладки.
Ctrl+B, N — перейти к следующей закладке.
Ctrl+B, P — перейти к предыдущей закладке.

Форматирование и редактирование

Многие знают и используют Ctrl+C и Ctrl+V, но студия обладает ещё рядом удобным комбинаций:
Ctrl+Shift+V — не отпуская Ctrl+Shift и нажимая на V, вы сможете вставить один из 10 последних кусков текста, скопированных в буфер обмена.
Tab — увеличить отступ.
Shift+Tab — уменьшить отступ.


Мне иногда не хватало вертикального выделения текста, бывает полезно. Оказывается и такая возможность есть! Стоит нажать Alt, и не отпуская, выделять мышкой текст. Но есть минус — меню и стрелочки клавиатуры :). Это решаемо, нажимаете Shift+Alt и используете стрелочки Left или Right

Если код доставшийся вам «грязен», не только по структуре, но и по внешнему оформлению, используйте:
Ctrl+E+D — форматирование всего документа, позволяет привести документ в более удобоваримый вид.
Ctrl+E+F — форматирование выбранной части текста

Иногда в целях рефакторинга или ещё каких-то благих начинаниях, есть смысл перевести все буквы в верхний или нижний регистр:
Ctrl+Shift+U — перевести выделенный блок в верхний регистр
Ctrl+U — перевести выделенный блок в нижний регистр

Цукерберг рекомендует:  6 секций кода PHP

Небольшой экскурс в сборку и отладку

Конечно же со стороны хоткеев ��
Начнём со «сборки»:
Ctrl+Shift+B или F6 — собрать solution.
Shift+F6 — собрать активный проект.
Если честно, тут я немного пошаманил, заточив под себя, иногда бывает удобно пересобрать проект RebuildSolution, но почему-то хоткей для этого не предусмотрен, я поступил следующий образом:
F6 — собрать solution
Ctrl+Shift+B — пересобрать solution
Поступил я так из-за соображения, что иногда студия не выполняет пересборку проекта, а пишет «up-to-date», а мне нужно именно пересобрать.

Если появились ошибки, это плохо, но никто от них не застрахован:
F5 — запустить программу, с возможностью отладки. Или продолжить выполнение программы, после точки останова.
Ctrl+F5 — запустить программу без отладки
F9 — поставить/убрать точку останова — breakpoint
Ctrl+Shift+F9 — удалить все точки останова.
F10 — выполнить код, без захода внутрь
F11 — выполнить код, с заходом внутрь

В режиме отладки есть два типа просмотра — Watch и QuickWatch.
Вызвать QuickWatch вы можете нажав Ctrl+D, Q. Просто Watch — Ctrl+D, W.

Hello, C# — Учим Шарп #2

Опубликовано shwan в 08.11.2020 08.11.2020

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

Перед началом данного урока рекомендую ознакомиться с предыдущим Преимущества и недостатки C# — Учим Шарп #1

Как работает компьютер

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

  • Записать значения в память
  • Прочитать значение из памяти
  • Выполнить операции сложения, умножения, отрицания

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

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

Что такое языки программирования

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

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

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

Инструмент создания приложений IDE

Таким образом, мы пришли к тому, что необходимы определенные инструменты, которые позволяют преобразовывать написанный текст на языке высокого уровня в машинные коды, которые будут понятны компьютеру. Такие приложения называются компиляторами. Но сейчас намного большей популярностью пользуются другие приложения, которые по сути являются основным инструментом современного программиста – это интегрированная среда разработки (Integrated Development Environment) IDE. По сути, это компилятор на стероидах. Это приложение, а иногда и набор инструментов, которые позволяют преобразовать исходный код, написанный программистом в готовое приложение, но содержащее в себе еще вагон и маленькую тележку дополнительных приблуд, которые делают жизнь программиста чуточку проще. Это и всевозможные статические анализаторы кода, которые находят ошибки еще до запуска приложения, а также указывают на так называемый код с душком. Это и системы тестирования, анализа и статистики по коду, инструменты для быстрого рефакторинга и выгрузки документации по коду. Короче, целая куча крутых фишек, которыми никто не пользуется.

Visual Studio

Так вот, основным инструментом C# программиста является интегрированная среда разработки Visual Studio 2020 на данный момент. Скачать ее можно по ссылке https://visualstudio.microsoft.com/ru/ Существует 3 основные версии

Разница между ними только в количестве всех вот этих наворотов и цене. На начальном этапе я всем рекомендую использовать Community версию, которая является бесплатной с небольшими ограничениями:

— Visual Studio Community может использовать неограниченное число пользователей в учебных аудиториях, для научных исследований или участия в проектах с открытым кодом.

— Для всех прочих сценариев использования: в некорпоративных организациях Visual Studio Community может использовать до 5 пользователей. В корпоративных организациях (в которых используется > 250 ПК или годовой доход которых > 1 млн долларов США) использование запрещено.

Таким образом, пока ты зарабатываешь меньше 1 млн долларов в год, ив твоей команде меньше 5 человек, можешь разрабатывать любое ПО в том числе и коммерческое.

Сейчас установка, обновление и изменение компонентов Visual Studio стало достаточно приятных и простым занятием, хотя раньше приносило достаточно много головной боли. Просто скачивай специальное приложение-установщик на свой компьютер и запускай установку. После скачивания необходимых компонентов, откроется окно выбора того, что тебе нужно установить.

Так как разработка на C# подразумевает универсальные приложения под любые платформы, то предоставляется over9000 компонентов, которые в большинстве своем совершенно тебе не нужны на данном этапе. Сейчас я покажу тебе необходимый минимум, а также мою рекомендуемую коллекцию компонентов.

  • Разработка классических приложений .NET — обязательно
  • ASP.NET и разработка веб-приложений
  • Кроссплатформенная разработка .NET Core

Самые нужные расширения для Visual Studio

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

Для этого открываем меню Средства => Расширения и обновления

Выбрать В сети и в строке поиска ввести названия необходимых расширений

ReSharper – суперкрутой статический анализатор кода. Может практически все, но некоторым (в том числе мне) не нравится, потому что бесит, и является платным. Но в целом очень полезен.

Web Essentials – mast have для веб программистов. Позволяет весьма упростить и ускорить процесс работы в интерфейсной частью приложения, упрощает и ускоряет верстку, но в других случаях он не нужен.

Productivity Power Tools 2020/2020 – целый набор небольших расширения, позволяющих сделать процесс написания кода комфортнее, код чище и красивее. Настоятельно рекомендую устанавливать каждому.

GitHub Extension for Visual Studio – очень удобное взаимодействие с популярным сервисом хранения кода и системой контроля версий. Каждому программисту нужно научиться и постоянно использовать любую подходящую систему контроля версий. А это расширение позволит форкать проекты и выполнять коммиты в пару кликов.

Visual Studio Spell Checker — позволяет избавиться от таких досадных ошибок, как опечатки в коде. Работает примерно как в ворде — подчеркивает красным не правильные слова. При этом он понимает различные нотации и без проблем понимает, что написанные слитно слова, но с заглавными буквами это не ошибка.

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

Создадим Hello World проект на C#

Открываем среду разработки Visual Studio и заходим в меню Файл => Создать => Проект

После этого выбираем Visual C# => Классическое приложение для Windows => Консольное приложение (.NET Framework), вводим имя проекта, указываем его расположение на диске и нажмем ОК.

В открывшимся окне вводим следующий код приложения

После чего запускаем приложение, нажав сочетание клавишь Ctrl+F5 или зеленую клавишу Пуск и получаем следующий результат

Поздравляю, вы создали свое первое приложение!

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

Visual Studio Code


Программист постоянно работает с исходными кодами. Инструменты для написания кода можно разделить на две группы: среды разработки (IDE) и редакторы. Первые предоставляют большие возможности при разработке программ: отладку, управление пакетами, интеграцию с тестами и тд. Например: Visual Studio, Intellij IDEA, Eclipse. Редакторы – легковесные программы, в которых нет таких широких возможностей как в IDE. Тем не менее они выполняют главную функцию – помогают быстро писать код. А многие из них предоставляют богатые возможности по настройке под себя. Примеры редакторов кода: Sublime Text, Atom, Notepad++.

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

VS Code

Visual Studio Code – редактор кода от Microsoft. Он бесплатный, и скачать его можно на официальном сайте. VS Code соответствует новой политике Microsoft, поэтому он опенсорсный и работает на нескольких платформах. Рассмотрим отличительные черты этого редактора:

  • Скорость. Часто возникает ситуация, когда нужно поправить пару файлов в проекте или посмотреть, как что-то реализовано. В такой ситуации открывать тяжеловесную IDE совсем не хочется. Время запуска VS Code сопоставимо с другими редакторами кода.
  • Кастомизация. При разработке программ можно повысить свою продуктивность, настроив редактор под себя. Создавайте сниппеты, меняйте комбинации клавиш и создавайте новые, измените внешний вид редактора. VS Code предоставляет большие возможности для кастомизации и сегодня мы посмотрим на них подробно.
  • Поддержка различных языков. VS Code понимает более 30 языков программирования. Под этим я имею ввиду выделение разными цветами методов, локальных переменных и так далее. Кроме того, из коробки полностью поддерживаются распространенные языки для веб-разработки: JavaScript, TypeScript, HTML, CSS. Для них работают все фичи, которые нужны при полноценной разработке: подсветка ошибок, подсказки по их исправлению, IntelliSense, навигация по коду, отладка, рефакторинг. Однако, это не значит, что остальные языки обделены. Перейдем к следующему пункту.
  • Расширяемость. В VS Code богатая коллекция плагинов. С их помощью можно не только включить поддержку любых языков программирования, но и значительно повысить свою производительность.
  • IntelliSense. Все предыдущие пункты не новы для других редакторов кода, но, как уже было сказано, VS Code – не просто редактор кода. Он предоставляет возможности, которые свойственны IDE, и IntelliSense одна из них. Этим термином называется умный автокомплит. Например, во время ввода он может подсказать, какие методы и свойства есть у объекта.
  • Отладка. Еще одна стандартная фича IDE. Обходы методов, Call Stack, просмотр состояний локальных объектов, точки останова, в том числе и условные – все это есть.
Цукерберг рекомендует:  Обучение - подскажите код рандома

Внешний вид

В нужной директории введите в терминал code . и увидите подобную картину:

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

  • Explorer. На изображении выше открыт этот блок. В нем определяется workspace – файлы, с которыми вы работаете. Имя рабочего пространства соответствует корневой директории. Над ним перечислены все открытые в редакторе файлы. Кружком помечены те, которые не сохранены.
  • Search. Поиск по workspace. Можно искать с учетом регистра, целых слов и по шаблону. В этом же блоке работает замена строк. Для перехода в режим поиска можно использовать комбинацию CTRL + SHIFT + F . При наведении курсора на любой блок VS Code подскажет какие комбинации клавиш им соответствуют.
  • Source Control. Встроенная поддержка git и других систем контроля версий.
  • Debug. Все для отладки: Variables, Call Stack, Watch, Breakpoints.
  • Extensions. Набор всевозможных плагинов, которые можно установить. Вот список самых популярных:

В центральной части редактора вкладки с открытыми файлами. Несохраненные также помечаются кружком. При запуске VS Code открывается вкладка Welcome. Начать изучение редактора советую с нее. Открыть ее всегда можно через меню Help. Еще один способ изучить возможности VS Code – нажать CTRL + SHIFT + P . Так вы откроете Command Palette, где перечислены все команды редактора. Рядом с названием команды указывается комбинация клавиш, которая ей соответствует.

В нижней части – несколько других полезных вкладок. В Problems перечислены все ошибки и предупреждения от VS Code. Во время отладки можно смотреть значения локальных объектов в разделе Debug Console, а результаты выполнения во вкладке Output. В VS Code есть встроенный терминал, который открывается в корневой директории. По кнопке “плюс” можно добавлять терминалы, например, чтобы выполнять команды в разных директориях внутри проекта. По умолчанию для Windows в VS Code используется Powershell терминал, но это можно изменить. Займемся этим в следующем разделе.

Кастомизация

В VS Code можно настроить очень многое под свои нужды. Меняйте внешний вид редактора и автоматизируйте ваши действия.

Изменение темы

Выберете цветовую гамму, которая нравится вам больше. В дефолтном варианте у редактора темная тема. Для смены нажмите CTRL + K, CTRL + T . Если набора из 14 стандартных тем будет недостаточно, введите в разделе с плагинами category:themes и выберете подходящую для вас.

Изменение настроек

Все дефолтные настройки VS Code перечислены в формате JSON. Чтобы переопределить их для себя, нужно создать файл settings.json и перечислить настройки, которые вы хотите изменить. Для этого нажмите CTRL + , . Слева перечислены все стандартные настройки и описание того, зачем они нужны. Справа – две вкладки: для пользовательских настроек и для настроек конкретного workspace. Для изменения дефолтного значения просто кликните на значок карандаша справа от настройки.

Рассмотрим некоторые настройки, которые могут вам пригодиться:

  • Настройки редактирования.
    • Размер шрифта. «editor.fontSize»: 14
    • Размер таба. «editor.tabSize»: 4
    • Шрифт. «editor.fontFamily»: «Consolas, ‘Courier New’, monospace»
    • Перенос слов. «editor.wordWrap»: «on»

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

  • Настройки файлов.
    • Автосохранение. «files.autoSave»: «on»
    • Задержка при автосохранении. «files.autoSaveDelay»: 5000

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

  • Терминал.
    • Размер шрифта. «terminal.integrated.fontSize»: 14
    • Выбор терминала. «terminal.integrated.shell.windows»: «C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe»
    • Тип курсора. «terminal.integrated.cursorStyle»: «line»

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

  • Специфичные для языка. Настройки для кода также можно ограничивать конкретными языками. Для этого нужно перед настройкой указать идентификатор языка в квадратных скобках: «[csharp]»: < "editor.wordWrap": "off" >. Идентификаторы можно посмотреть в списке всех языков ( CTRL + K, M ).

Создание задач

Зачем нужны задачи покажу на конкретном примере. Для локального запуска сайта я использую команды:

Для того, чтобы делать это, не выходя из редактора, можно использовать встроенный терминал. Однако, можно автоматизировать и этот процесс. Для этого существуют задачи. Откроем их конфигурацию через Command Palette: Tasks. Configure Tasks . В открывшемся файле tasks.json создадим кастомную задачу.

Однако, это несильно автоматизирует наш процесс. Для запуска этой задачи нужно открывать Command Palette и искать ее среди других команд. Чтобы запускать задачу по кнопке, откроем файл keybindings.json (в Command Palette: Preferences. Open Keyboard Shortcuts File ) и добавим нужные комбинации клавиш.

Также задачи часто используются для автоматизации сборки кода и прогона тестов.

Создание сниппетов

Сниппетом называется фрагмент кода, который можно многократно использовать. Для этого нужно ввести ключевое слово, и он будет вставлен в текст программы. Создадим простой сниппет, который генерирует цикл for для языка C#. В Command Palette введите Preferences. Open User Snippets и выберите нужный язык программирования. Так выглядит сниппет для цикла for:

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

Полезные комбинации клавиш

Если вы уже привыкли к горячим клавишам в других редакторах или IDE и не хотите из-за этого переходить на VS Code, то вы можете подключить знакомые настройки, просто установив нужный плагин.

Рассмотрим стандартные команды и соответствующие им комбинации клавиши, которые полезны в самых разных ситуациях. Маппинг команд и сочетаний клавиш можно открыть через CTRL + K, CTRL + S и переопределить на свой вкус.

  • Zen Mode ( CTRL + K, Z ). В этом режиме окно с кодом занимает весь экран. Это располагает к максимальной сосредоточенности на этом файле и работе. Он отличается от полноэкранного режима ( F11 ), в котором все пространство занимает именно редактор. В режиме Zen вы не будете отвлекаться ни на что. Для переключения на другой файл используйте комбинацию CTRL + P . Она работает во всех режимах и позволяет искать именно по файлам в рабочем пространстве. Выход из режима Zen осуществляется двойным ESC .
  • Markdown Preview ( CTRL + K, V ). Полезная операция для тех, кто пользуется Markdown. Она отображает справа от текста результаты вашей верстки.
  • Дублирование строки вниз/вверх ( ALT + SHIFT + DOWN/UP ).
  • Перемещение строки вниз/вверх ( ALT + DOWN/UP ).
  • Комментирование строки ( CTRL + / ).

Команды выше работают и для нескольких строк.


  • Вставка новой строки вверх/вниз ( CTRL + ENTER / CTRL + SHIFT + ENTER ).
  • Выделение строки ( CTRL + I ).
  • Выделение слова ( CTRL + D ).
  • Множественный курсор. ( ALT + CLICK ).

Заключение

Мне трудно представить свой рабочий процесс без VS Code. Если вы им не пользуетесь, то советую хотя бы попробовать. Сегодня мы посмотрели на малую часть того, как можно упростить работу с кодом с помощью этого редактора. В следующий раз мы рассмотрим некоторые полезные плагины, которые есть в маркете VS Code.

Written on February 17th, 2020 by Alexey Kalina

C#: обработка ошибок

Исключения, их обработка, и некоторые другие моменты, связанные с ошибками в приложении на C#.

Исключения (Exceptions) и инструкция try

Инструкция try отмечает блок кода как объект для обработки ошибок или очистки. После блока try обязательно должен идти либо блок catch , либо блок finally , либо они оба. Блок catch выполняется, когда внутри блока try возникает ошибка. Блок finally выполняется после того, как прекращает выполнять блок try (или, если присутствует, блок catch ), независимо от того, выполнился ли он до конца или был прерван ошибкой, что позволяет выполнить так называемый код очистки.

Блок catch имеет доступ к объекту исключения ( Exception ), который содержит информацию об ошибке. Блок catch позволяет обработать исключительную ситуацию и как-либо скорректировать ошибку или выбросить новое исключение. Повторное выбрасывание исключения в блоке catch обычно применяется с целью логирования ошибок или чтобы выбросить новое, более специфическое исключение.

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

В целом конструкция try выглядит следующим образом:

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

Чтобы этого избежать можно использовать конструкцию try :

Обработка исключений довольно ресурсоёмкая операция, поэтому на практике для таких случаев как в примере ее лучше не использовать (лучше непосредственно перед делением проверить делить на равенство нулю).

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

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

Оговорка catch

В оговорке catch указывается какой тип исключения она должна перехватывать. Это может быть либо System.Exception , либо его производный класс. Перехватывая непосредственно System.Exception , мы перехватим все возможные ошибки. Это может быть полезно в нескольких случаях:

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

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

Можно обработать несколько типов исключений с помощью нескольких оговорок catch:

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

Цукерберг рекомендует:  Пользовательский интерфейс iOS-приложений. Swift 5, XCode 10

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

Более того, в оговорке catch можно опустить и переменную и тип исключения — такая оговрка будет перехватывать все исключения:

Блок finally

Блок finally выполняется всегда, независимо от того выброшено исключение или нет. Блок finally обычно содержит код очистки.

Блок finally выполняется в следующих случаях:

  • после завершения блока catch
  • если выполнение блока try прервано jump-инструкциями: return , goto и т.д.
  • после выполнения блока try полностью, если исключений так и не было выброшено

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

В пример для закрытия файла вызывается метод Dispose . Использование этого метода внутри блока finally является стандартной практикой. C# даже позволяет заменить всю конструкцию инструкцией using .

Инструкция using

Многие классы инкапсулируют неуправляемые ресурсы, такие как дескриптор файла, соединение с базой данных и т.д. Эти классы реализуют интерфейс System.IDisposable , который содержит единственный метод без параметров Dispose , освобождающий соответствующие машинные ресурсы. Инструкция using предусматривает удобный синтаксис вызова метода Dispose для объектов реализующих IDisposable внутри блока finally :

Что эквивалентно следующей конструкции:

Выбрасывание исключений

Исключение может быть выброшено автоматически во время выполнения программы либо явно в коде программы с помощью ключевого слова throw :

Также исключение может быть выброшено повторно внутри блока catch :

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

Если throw заменить на throw ex , то пример по прежнему будет работать, но свойство исключения StackTrace не будет отражать исходную ошибку.

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

В таких случаях необходимо передать исходное исключение в качестве первого параметра конструктора нового исключения, ссылка на объект исходного исключения позже будет доступна через свойство InnerException внутреннего исключения.

Основные свойства System.Exception

К наиболее важным свойствам класса System.Exception можно отнести:

  • StackTrace — строка, представляющая все методы, которые были вызваны, начиная с того, в котором было выброшено исключение, и заканчивая тем, в котором содержится блок catch , перехвативший исключение;
  • Message — строка с описанием ошибки;
  • InnerException — содержит ссылку на объект Exeption , который вызвал текущее исключение (например, при повторном выбрасывании исключения).

Основные типы исключений

Следующие типы исключений являются наиболее распространенными в среде CLR и .NET Framework. Их можно выбрасывать непосредственно или использовать как базовые классы для пользовательских типов исключений.

  • System.ArgumentException — выбрасывается при вызове функции с неправильным аргументом.
  • System.ArgumentNullException — производный от ArgumentException класс, выбрасывается если один из аргументов функции неожиданно равен null .
  • System.ArgumentOutOfRangeException — производный от ArgumentException класс, выбрасывается когда аргумент функции имеет слишком большое или слишком маленькое значение для данного типа (обычно касается числовых типов). Например, такое исключение будет выброшено если попытаться передать отрицательное число в функцию, которая ожидает только положительные числа.
  • System.InvalidOperationException — выбрасывается когда состояние объекта является неподходящим для нормального выполнения метода, например, при попытке прочесть не открытый файл.
  • System.NotSupportedException — выбрасывается, когда запрошенный функционал не поддерживается, например, если попытаться вызвать метод Add для коллекции доступной только для чтения (свойство коллекции IsReadOnly возвращает true ).
  • System.NotImplementedException — выбрасывается, когда запрошенный функционал еще не реализован.
  • System.ObjectDisposedException — выбрасывается при попытке вызвать метод объекта, который уже был уничтожен (disposed).


Директивы препроцессора

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

C# — c# VS код работает через f11 но не работает через f5

Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Форум программистов > Технологии > Помощь студентам
Программа на Visual C# работает при запуске руками, но не работает при попытки автоматического запуска
Регистрация
Поиск по форуму
Расширенный поиск
К странице.
Страница 1 из 2 1 2 Следующая >

Приветствую всех. Написал простенькую программку на Visual C#, которая в цикле берет новые данные из базы и записывает в текстовый файл. Все исправно работает при запуске руками, но при попытке автоматизировать запуск, к примеру, через планировщик заданий, получаю в журнале приложений такую ошибку .NET Runtime :

Description: The process was terminated due to an unhandled exception.
Exception Info: System.NullReferenceException
Stack:
at ConsoleApplication1.Program.Main(Sy stem.String[])

Подскажите новичку куда копать. Спасибо за ответы.

VSCode С# «перейти к определению» (F12) не работает

Я использую VSCode 1.19 и пытаюсь «Перейти> Перейти к определению» в файле.cs, как в Visual Studio, и ничего не делает. В файле.js он работает хорошо, и я предполагаю, что есть какое-то обходное решение.

В папке может быть несколько «проектов», и VSCode выбрал «неправильный». (в терминах VSCode «проект» означает файл sln)

Используйте ctrl-shift-P и выберите «OmniSharp: Select Project», чтобы выбрать правильный проект (файл .sln).

Если у вас открыто окно «Вывод» с выбранным «Журналами OmniSharp», вы увидите, что оно читает ваш csproj. После того, как ваше определение Goto начнет работать

Как написано в комментариях к ответу @AndyPook, еще одно возможное решение — просто перезапустить OmniSharp.

CTRL + SHIFT + P → OmniSharp: Restart OmniSharp

У меня была такая же проблема, но с папкой проекта TypeScript. Решение было просто открыть папку.

Сегодня я сталкиваюсь с тем же пролемамом, пытаюсь переместить себя из Visual Studiod в Code, поскольку мой порт на основе Microservie, у меня есть несколько решений и репозиций в отношении каждого микросервиса, чтобы сделать CI/CD простым, Теперь, где VS-код Multipel Root Work Space помогает мне, поэтому, пожалуйста, следуйте ниже, если вы создаете VS Code из перспективы профессионального развития как разработчик С#,

16.10.2013, 14:36 #1