This lesson is not translated yet – the Russian original is below.
Один файл 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» встречается в документации постоянно, и лучше знать, что за ним стоит.