Открыть сервис

NET SDK

NET SDK (Software Development Kit) — это набор инструментов, библиотек и утилит, предназначенный для разработки, сборки, тестирования и развертывания приложений, работающих на платформе .NET. SDK является основным средством взаимодействия разработчика с платформой и включает в себя компиляторы, отладчик, средства управления пакетами, а также интерфейс командной строки (CLI).

История

Предпосылки и появление

Платформа .NET была анонсирована корпорацией Microsoft в 2000 году. Первые версии .NET Framework (1.0, 2002 год) поставлялись в составе Visual Studio .NET и не имели отдельного SDK в современном понимании. Разработчики использовали интегрированную среду разработки (IDE) для сборки проектов, а командная строка была доступна лишь через утилиты, такие как csc.exe (компилятор C#) и al.exe (компоновщик сборок).

Разделение на .NET Framework и .NET Core

В 2014 году Microsoft анонсировала .NET Core — кроссплатформенную, модульную и открытую реализацию .NET. Вместе с ней появился новый инструмент — .NET Core CLI (командная строка), который впоследствии стал основой современного .NET SDK. Версия .NET Core 1.0 (2016 год) включала SDK, который позволял создавать, собирать и публиковать приложения без установки Visual Studio.

Консолидация в единую платформу

В 2020 году, с выходом .NET 5, произошло объединение .NET Framework, .NET Core и Xamarin в единую платформу .NET. SDK для .NET 5 и последующих версий (6, 7, 8, 9) стал универсальным: он поддерживает разработку консольных приложений, веб-приложений (ASP.NET Core), мобильных приложений (MAUI), облачных сервисов и игр (Unity). Начиная с .NET 6, SDK поставляется в виде единого установщика для Windows, macOS и Linux.

Состав и компоненты

Компиляторы

  • C# (Roslyn): компилятор языка C#, поддерживающий версии от C# 1.0 до C# 13 (в .NET 9). Обеспечивает синтаксический анализ, генерацию промежуточного кода (IL) и метаданных.
  • F#: компилятор функционального языка F#, входящий в состав SDK.
  • Visual Basic (VB.NET): компилятор языка Visual Basic, доступный для обратной совместимости.

Интерфейс командной строки (CLI)

Основной инструмент взаимодействия с SDK — команда dotnet. Она предоставляет более 50 подкоманд, сгруппированных по функциональным областям:

  • dotnet new — создание нового проекта или файла на основе шаблона.
  • dotnet build — компиляция проекта и его зависимостей.
  • dotnet run — запуск проекта без явной сборки.
  • dotnet test — выполнение модульных тестов.
  • dotnet publish — подготовка приложения к развертыванию (сборка и копирование зависимостей).
  • dotnet pack — создание NuGet-пакета из проекта.
  • dotnet restore — восстановление зависимостей, указанных в файле проекта.
  • dotnet add reference — добавление ссылки на другой проект.

Система управления пакетами (NuGet)

SDK включает в себя клиент NuGet, который позволяет загружать, устанавливать и обновлять сторонние библиотеки из репозитория NuGet.org или частных источников. Файлы зависимостей хранятся в формате XML (.csproj или .fsproj), а команда dotnet restore автоматически разрешает конфликты версий.

Средства отладки и профилирования

  • Отладчик: встроенная поддержка отладки через Visual Studio, Visual Studio Code и JetBrains Rider. SDK предоставляет символы отладки (PDB-файлы) и поддерживает точки останова, пошаговое выполнение и просмотр переменных.
  • Сборщик мусора (GC): автоматическое управление памятью, настраиваемое через конфигурацию проекта.
  • Профилировщик: утилиты для анализа производительности, такие как dotnet-trace и dotnet-counters, доступные как глобальные инструменты.

Средства тестирования

SDK включает в себя три основных фреймворка для модульного тестирования:

  • xUnit.net: наиболее популярный фреймворк, основанный на атрибутах [Fact] и [Theory].
  • NUnit: классический фреймворк с поддержкой параметризованных тестов.
  • MSTest: фреймворк от Microsoft, входящий в состав Visual Studio.

Классификация и версии

По версиям платформы

Каждая версия .NET SDK соответствует конкретной версии рантайма (runtime). Например:

  • .NET SDK 6.0.x — для .NET 6 (LTS, поддержка до 2024 года).
  • .NET SDK 8.0.x — для .NET 8 (LTS, поддержка до 2026 года).
  • .NET SDK 9.0.x — для .NET 9 (STS, поддержка до 2025 года).

По типу установки

  • Полный SDK: включает все компоненты (компиляторы, CLI, рантайм, шаблоны). Занимает около 500–800 МБ.
  • SDK для разработчиков: содержит только компиляторы и CLI, без рантайма (используется для CI/CD).
  • Глобальные инструменты: отдельные утилиты, устанавливаемые через dotnet tool install (например, dotnet-ef для Entity Framework).

По целевому назначению

  • Desktop: для Windows Forms, WPF, MAUI.
  • Web: для ASP.NET Core (MVC, Razor Pages, Blazor).
  • Cloud: для Azure Functions, AWS Lambda.
  • Mobile: для Xamarin (до .NET 6) и MAUI (с .NET 6).
  • Gaming: для Unity (через IL2CPP).

Применение

Разработка веб-приложений

ASP.NET Core — основной фреймворк для создания веб-приложений на .NET. SDK позволяет создавать проекты с использованием шаблонов web, webapi, mvc, razor и blazor. Поддерживается как традиционный серверный рендеринг, так и клиент-серверная архитектура (Blazor WebAssembly).

Создание микросервисов

.NET SDK широко используется в архитектуре микросервисов благодаря поддержке контейнеризации (Docker), встроенному HTTP-клиенту (HttpClient) и интеграции с оркестраторами (Kubernetes). Команда dotnet publish позволяет создавать самодостаточные (self-contained) исполняемые файлы, которые не требуют установки рантайма на целевой машине.

Разработка кроссплатформенных приложений

С помощью .NET MAUI (Multi-platform App UI) SDK позволяет создавать приложения для Windows, macOS, iOS, Android и Tizen из единой кодовой базы на C# и XAML. Поддерживается как нативная отрисовка, так и использование веб-технологий (Blazor Hybrid).

Облачные вычисления

SDK интегрирован с облачными платформами:

Автоматизация сборки и CI/CD

SDK используется в системах непрерывной интеграции (GitHub Actions, Azure DevOps, Jenkins) для автоматической сборки, тестирования и публикации проектов. Команды dotnet build, dotnet test и dotnet publish являются стандартными шагами в пайплайнах.

Примеры использования

Создание консольного приложения

``bash dotnet new console -n MyApp cd MyApp dotnet run ` Это создаст проект с файлом Program.cs, содержащим метод Main`, и автоматически восстановит зависимости.

Добавление сторонней библиотеки

``bash dotnet add package Newtonsoft.Json ` Команда добавляет ссылку на пакет Newtonsoft.Json в файл .csproj` и загружает его из NuGet.

Публикация самодостаточного приложения

``bash dotnet publish -c Release -r win-x64 --self-contained true `` Создаёт исполняемый файл для Windows x64, включающий все необходимые библиотеки .NET.

Критика и ограничения

Размер и время установки

Полный SDK занимает несколько сотен мегабайт, что может быть проблемой для сред с ограниченным дисковым пространством, например, в контейнерах Docker. Для таких случаев рекомендуется использовать образы mcr.microsoft.com/dotnet/sdk:9.0 с предустановленным SDK.

Совместимость версий

Несмотря на усилия Microsoft по обратной совместимости, некоторые проекты, созданные для .NET Framework, не могут быть напрямую перенесены на .NET SDK без изменений (например, из-за отсутствия поддержки Windows Forms в .NET Core до версии 3.0). Также существуют проблемы с устаревшими API, которые были удалены в новых версиях.

Зависимость от экосистемы

Хотя SDK является открытым (лицензия MIT), его основная разработка ведётся Microsoft, что вызывает опасения у некоторых разработчиков относительно vendor lock-in. Однако проект полностью поддерживается сообществом через GitHub, и существуют альтернативные реализации, такие как Mono.

Интересные факты

  • SDK для .NET Core 1.0 (2016 год) был первым SDK, который работал на Linux и macOS, что позволило разработчикам использовать .NET вне экосистемы Windows.
  • Начиная с .NET 5, команда dotnet --version показывает версию SDK, а не рантайма. Для проверки версии рантайма используется dotnet --list-runtimes.
  • SDK включает в себя более 200 встроенных шаблонов проектов, включая шаблоны для игр на Unity, приложений для Raspberry Pi и даже для создания собственных анализаторов кода (Roslyn Analyzers).
  • В .NET 8 была добавлена поддержка Native AOT (Ahead-of-Time compilation), которая позволяет компилировать приложения в машинный код без использования JIT-компилятора, что значительно уменьшает время запуска.

Источники

  • Документация Microsoft .NET SDK (learn.microsoft.com/dotnet/core/sdk)
  • Репозиторий dotnet/sdk на GitHub (github.com/dotnet/sdk)
  • Статья «What is .NET SDK?» на сайте Microsoft (docs.microsoft.com/dotnet/core/sdk)
  • Книга «.NET Core in Action» (M. J. Price, 2018)
  • Официальный блог .NET (devblogs.microsoft.com/dotnet)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →