Rate this post

Microsoft представила одно из самых захватывающих нововведений в .NET — новую команду dotnet run.
Эта функция доступна в .NET и полностью меняет подход к написанию и запуску кода на C#.

Теперь больше не нужно создавать полноценный проект, чтобы просто протестировать идею или вывести «Hello World». Всё стало гораздо проще, легче и дружелюбнее для новичков.

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

Начало работы

Начнём с полностью пустой папки в Visual Studio Code — без файлов проекта, без решения, просто чистое рабочее пространство.

Обратите внимание: у вас должны быть установлены .NET 10 и C# Dev Kit для VS Code.

Создайте новый файл под названием hello.cs и вставьте в него следующий код:

Console.WriteLine("Hello from .NET 10! This is a cool feature.");

Без пространств имён, без класса, без метода Main() — один файл, одна строка, и всё работает.

Запуск файла

А вот и магия. Вместо создания проекта просто откройте терминал и введите:

dotnet run hello.cs

И программа запустится!
Результат на экране:

Hello from .NET 10! This is a cool feature.

.NET компилирует и запускает файл напрямую — без дополнительной настройки и без проекта.
Под капотом код собирается в памяти и выполняется как скрипт.

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

Добавляем функциональность: работа с датами

Теперь сделаем шаг дальше.
Допустим, мы хотим вывести дату публикации, например — 3 дня назад.

Добавим такой код:

var postedDate = DateTime.UtcNow.AddDays(-3);
Console.WriteLine($"Posted date: {postedDate}");

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

Исправим это.

Использование NuGet-пакетов без проекта

Теперь можно использовать NuGet-пакеты даже без создания проекта.

Возьмём пакет Humanizer, который форматирует даты в удобном виде — например, вместо отметки времени покажет «3 дня назад».

В начале файла добавим:

#r "nuget: Humanizer, 2.14.1"

Далее подключим пространство имён:

using Humanizer;

Теперь изменим вывод в консоль:

var postedDate = DateTime.UtcNow.AddDays(-3);
Console.WriteLine($"Posted {postedDate.Humanize()}");

Запустите снова:

dotnet run hello.cs

При первом запуске может потребоваться немного времени, чтобы загрузить пакет, но затем всё выполняется мгновенно.
Теперь результат выглядит так:

Posted 3 days ago

 

Просто, красиво и читаемо — именно то, что нужно.

Создание минимального API в одном файле

Теперь пойдём ещё дальше. Что, если нужно создать небольшой API, но без полноценного проекта?
Это теперь тоже возможно.

Создайте новый файл api.cs и добавьте в него:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();app.MapGet("/testapi", () => "Hello from .NET 10!");
app.Run();

Попробуйте запустить:

dotnet run api.cs

Вы получите ошибку: WebApplication не существует в текущем контексте.
Это логично — мы используем функции минимального API, но не указали, что работаем с Web SDK.

Подключаем Web SDK

Чтобы всё заработало, добавим в начало файла строку:

#sdk "Microsoft.NET.Sdk.Web"

Теперь снова запустим:

dotnet run api.cs

И всё работает! API запущен и слушает по адресу http://localhost:5000.

Откройте Postman или браузер и перейдите по маршруту /testapi.
Ответ:

Hello from .NET 10!

Минимальный API полностью работает — и всё это в одном файл

Преобразование файла в полноценный проект

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

dotnet project convert api.cs

.NET автоматически:

  • создаёт новую папку проекта,
  • переносит туда api.cs,
  • генерирует файл .csproj,
  • добавляет все необходимые SDK и ссылки на пакеты.

Пример созданного .csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Теперь можно собирать, восстанавливать и запускать проект как обычно.

Конвертация Hello World в проект

То же самое можно сделать с файлом hello.cs:

dotnet project convert hello.cs

.NET создаст консольный проект и автоматически добавит зависимости, которые использовались, включая Humanizer.

Пример .csproj:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Humanizer" Version="2.14.1" />
</ItemGroup>
</Project>

Всё готово к запуску — и ни одной ручной настройки.

Заключение

Мы прошли путь от одного C#-файла с несколькими строками кода до:

  • запуска его напрямую через dotnet run,
  • использования NuGet-пакетов,
  • создания минимального API в одном файле,
  • и конвертации всего в полноценный проект.

И всё это — без ручной настройки.
.NET 10 действительно меняет то, как мы начинаем работать с C#.
Будь вы новичком, создающим прототип, или опытным разработчиком, пишущим скрипт, новый процесс стал чище, быстрее и удобнее.
Если статья оказалась полезной — ставьте лайк и следите за новыми материалами о .NET 10, минимальных API, AI-интеграции и других обновлениях экосистемы .NET.