Пространство имен System в .NET реализовано в одной DLL или в нескольких?

«Пространство имен System в .NET реализовано в одной DLL или в нескольких?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Типы из пространства имен System распределены по множеству различных сборок (DLL). Это архитектурное решение, позволяющее подключать только необходимые функциональности и уменьшать размер приложений, особенно в .NET Core и современных версиях .NET.

Ключевые сборки, содержащие типы System:

  • System.Private.CoreLib.dll (в .NET Core/.NET 5+): Содержит фундаментальные типы, такие как System.Object, System.String, System.Int32, базовые интерфейсы и атрибуты. Это "ядро" среды выполнения.
  • System.Runtime.dll: Содержит многие другие базовые типы и интерфейсы.
  • Специализированные сборки: Конкретные функциональные области вынесены в отдельные DLL, которые добавляются как зависимости по мере необходимости.
    • System.Collections.dll — основные коллекции (List<T>, Dictionary<TKey, TValue>).
    • System.IO.dll — работа с файлами и потоками.
    • System.Threading.Tasks.dll — типы для асинхронного программирования (Task, ValueTask).

Как это выглядит на практике: В файле проекта .csproj зависимости добавляются автоматически или вручную.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>
  <!-- Явное добавление пакета, если тип из него используется, а ссылки нет -->
  <ItemGroup>
    <PackageReference Include="System.Text.Json" Version="8.0.0" />
  </ItemGroup>
</Project>

Вывод: Пространство имен System — это логическая группировка, а не физическая сборка. Современные приложения .NET ссылаются на десятки сборок, содержащих части этого пространства имен.