Библиотеки классов .NET
Библиотеки классов воплощают понятие общей библиотеки в .NET. Они позволяют помещать полезные функции в модули, которые могут использоваться разными приложениями. Они также могут использоваться для подключения функций, которые не были нужны или не были известны во время запуска приложения. Библиотеки классов описываются в формате файла сборки .NET.
Существует три доступных для использования типа библиотек классов:
- Библиотеки классов для конкретной платформы имеют доступ ко всем API-интерфейсам в данной платформе (например, платформа .NET Framework в Windows, Xamarin iOS), но могут использоваться только приложениями и библиотеками, предназначенными для этой платформы.
- Переносимые библиотеки классов имеют доступ к подмножеству API и могут использоваться приложениями и библиотеками, предназначенными для нескольких платформ.
- Библиотеки классов .NET Standard являются объединением специфических для платформы и переносимых библиотек и сочетают лучшие характеристики обоих типов.
Специфические для платформы библиотеки классов
Специфические для платформы библиотеки привязаны к одной платформе .NET (например, .NET Framework в Windows) и поэтому могут иметь множество зависимостей в конкретной среде выполнения. Такая среда предоставляет известный набор API (API.NET и ОС) и поддерживает и предоставляет ожидаемое состояние (например, реестр Windows).
Разработчики, создающие библиотеки для определенных платформ, могут использовать все возможности базовой платформы. При этом такие библиотеки будут работать только на данной платформе, что делает необязательной проверку платформы или другие виды условного кода (нет единого исходного кода для нескольких платформ).
Специфические для платформы библиотеки были основным типом библиотек классов в платформе .NET Framework. Даже после появления других реализаций .NET специфические для платформы библиотеки остались доминирующим типом библиотек.
Переносимые библиотеки классов
Переносимые библиотеки поддерживаются в нескольких реализациях .NET. Они по-прежнему могут иметь зависимости в известной среде выполнения, но такая среда является искусственной и представляет собой пересечение множества конкретных реализаций .NET. Предоставляемые API и платформенные допущения представляют то, что было бы доступным для библиотеки для определенной платформы.
Конфигурация платформы выбирается при создании переносимой библиотеки. Конфигурация платформы — это набор платформ, для которых нужно обеспечить поддержку (например, .NET Framework 4.5+ и Windows Phone 8.0+). Чем больше платформ вы решите поддерживать, тем меньше будет доступно API и платформенных допущений. Здесь действует принцип наименьшего общего знаменателя. Это может казаться странным, так как люди часто думают в духе "чем больше, тем лучше". Но в итоге оказывается, что большее количество поддерживаемых платформ связано с меньшим количеством доступных API.
Многие разработчики библиотек перешли с создания нескольких специфических для платформы библиотек для одного исходного кода (с использованием директив условной компиляции) на переносимые библиотеки. Есть несколько подходов к получению доступа к функциям определенной платформы в переносимых библиотеках. Но на текущий момент наиболее распространенным методом является механизм завлечения.
библиотеки классов .NET Standard;
Библиотеки .NET Standard заменяют концепции специфических для платформы и переносимых библиотек. Они являются специфичными для платформы в том смысле, что они предоставляют все функциональные возможности базовой платформы (без искусственных платформ или пересечений платформ). Они являются переносимыми в том смысле, что они работают на всех поддерживаемых платформах.
.NET Standard предоставляет набор библиотечных контрактов. Реализации .NET должны поддерживать каждый контракт полностью или не поддерживать вообще. Таким образом, каждая реализация поддерживает набор стандартных .NET контрактов. Следствием из этого является то, что каждая библиотека классов .NET Standard поддерживается на платформах, которые поддерживают ее контрактные зависимости.
.NET Standard не предоставляет всю функциональность платформа .NET Framework (и не является целью), однако библиотеки предоставляют гораздо больше API, чем переносимые библиотеки классов.
Следующие реализации поддерживают библиотеки .NET Standard:
- .NET Core
- .NET Framework
- Mono
- Универсальная платформа Windows (UWP)
Дополнительные сведения см. в статье .NET Standard.
Библиотеки классов Mono
Библиотеки классов поддерживаются в Mono, включая три типа библиотек, описанных выше. Mono часто рассматривается как кроссплатформенная реализация платформа .NET Framework. В частности, это связано с тем, что библиотеки, зависящие от платформы, платформа .NET Framework могут выполняться в среде выполнения Mono без изменения или повторной компиляции. Эта характеристика была на месте до создания переносимых библиотек классов, поэтому был очевидным выбором, чтобы включить двоичную переносимость между платформа .NET Framework и Mono (хотя она работала только в одном направлении).