Программа курса← C#: Базовый курс
1Знакомство с C# и .NET
2Данные и типы
3Ветвления и циклы
4Методы и ошибки
5Коллекции и строки
6Классы и объекты

Проект, сборка и запуск

Один файл Program.cs – это ещё не проект. Как только программе понадобится второй файл или чужая библиотека, кто-то должен решить, что с чем собирать. Этим занимается SDK – комплект инструментов .NET, который ставится вместе с платформой.

Что ставить на компьютер

Скачивается всё с dotnet.microsoft.com, и там сразу возникает развилка.

Что Кому
SDK тем, кто пишет код. Включает компилятор, инструменты и рантайм
Runtime тем, кто только запускает чужие программы. Собирать им нечего

Вам нужен SDK. Проверить, что он встал:

dotnet --version

Если версия напечаталась – всё готово. Команда dotnet --list-sdks покажет все установленные: их спокойно может быть несколько, и это нормально.

Версии .NET выходят каждый ноябрь. Чётные – LTS, их поддерживают три года; нечётные – восемнадцать месяцев. Для учёбы разницы нет, для рабочего проекта обычно берут LTS.

Создать проект

Одна команда создаёт папку с готовым к работе проектом:

dotnet new console -o HelloWorld
cd HelloWorld

console – шаблон консольного приложения. Есть и другие: classlib для библиотеки, web и webapi для веб-сервисов, xunit для тестов. Полный список выдаёт dotnet new list.

Внутри окажется немного:

HelloWorld/
├── HelloWorld.csproj    описание проекта
├── Program.cs           ваш код
└── obj/                 черновики сборки

Файл проекта

HelloWorld.csproj – это XML, и в новом проекте он умещается в семь строк:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Что здесь важно:

  • OutputType – Exe для запускаемой программы, Library для библиотеки;
  • TargetFramework – под какую версию .NET собираем. Цифра совпадает с версией платформы, у вас она может быть другой;
  • ImplicitUsings – самые ходовые using (включая System) подставляются автоматически, поэтому в новом Program.cs их и не видно;
  • Nullable – проверки на null во время компиляции. Что это значит, разберём в модуле про типы; выключать не надо.

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

Собрать и запустить

Три команды, которые понадобятся с первого дня:

dotnet run      # собрать при необходимости и запустить
dotnet build    # только собрать
dotnet clean    # удалить результаты сборки

Обычно хватает dotnet run. Отдельный dotnet build нужен, когда результат нужен вам файлом, а не запущенной программой.

После сборки рядом появляется папка bin с готовой сборкой:

bin/Debug/net9.0/HelloWorld.dll     ваш код в IL
bin/Debug/net9.0/HelloWorld         запускаемый файл

Слово Debug – это конфигурация сборки. Их две:

Конфигурация Чем отличается
Debug по умолчанию. Оптимизации выключены, отладочная информация на месте, точки останова работают
Release оптимизации включены, лишнего нет. Для того, что отдают пользователям

Собрать в релизе: dotnet build -c Release.

Замерять скорость программы на Debug-сборке бессмысленно: разница с Release бывает кратной. Если хотите узнать, что работает быстрее, собирайте в релизе.

Что не нужно хранить в git

Папки bin и obj создаются при сборке и восстанавливаются из исходников одной командой. В репозитории им делать нечего: они большие, меняются от каждой сборки и порождают бессмысленные конфликты.

Готовый список исключений создаётся командой:

dotnet new gitignore

Чужой код: пакеты

Чтобы не писать всё с нуля, к проекту подключают библиотеки из хранилища nuget.org:

dotnet add package Newtonsoft.Json

Команда допишет строку в .csproj и скачает пакет. Обратно – dotnet remove package, а dotnet restore докачивает всё, что перечислено в проекте: именно её запускают, когда клонируют чужой репозиторий, где bin и obj, разумеется, отсутствуют.

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

В чём писать

Командной строки достаточно, но редактор экономит часы.

Инструмент Особенности
Visual Studio Windows, полноценная среда, бесплатная редакция Community
JetBrains Rider все системы, бесплатен для некоммерческого использования
VS Code все системы, лёгкий; нужен официальный набор расширений C# Dev Kit

Выбор ни на что в курсе не влияет: всё, что мы пишем, собирается и запускается одинаково. Важно другое – научиться пользоваться отладчиком. Точка останова и просмотр значений переменных объясняют поведение программы быстрее, чем десяток Console.WriteLine, расставленных наугад.

Несколько проектов рядом

Когда проектов становится больше одного (например, программа и тесты к ней), их объединяют в решение – файл .sln:

dotnet new sln -n MyApp
dotnet sln add HelloWorld/HelloWorld.csproj

Дальше dotnet build в папке решения соберёт всё сразу. До шестого модуля это не понадобится, но слово «solution» встречается в документации постоянно, и лучше знать, что за ним стоит.