Сборки в .NET

Сборки представляют собой базовые элементы развертывания, управления версиями, повторного использования, назначения областей активации и прав доступа для приложений на основе платформы .NET. Сборка представляет собой коллекцию типов и ресурсов, собранных для совместной работы и образующих логическую функциональную единицу. Сборки создаются в виде исполняемого файла (EXE) или файла библиотеки динамической компоновки (DLL) и являются стандартными блоками приложений .NET. Они предоставляют сведения для среды CLR, которые нужны для распознавания реализаций типов.

В .NET Core и .NET Framework сборку можно создать из одного или нескольких файлов исходного кода. В .NET Framework сборки могут содержать один или несколько модулей. Благодаря этому в крупных проектах несколько разработчиков могут работать с отдельными файлами или модулями исходного кода, которые вместе образуют единую сборку. Дополнительные сведения см. в статье Практическое Создание многофайловой сборки.

Сборки имеют следующие свойства.

  • Сборки реализованы как файлы EXE или DLL.

  • Для библиотек, предназначенных для .NET Framework, сборки можно совместно использовать в нескольких приложениях, поместив их в глобальный кэш сборок (GAC). Прежде чем включить сборки в глобальный кэш сборок, нужно назначить им строгие имена. Подробнее см. в разделе Сборки со строгими именами.

  • Сборки загружаются в память только в том случае, если они реально используются. Если они не используются, то они не загружаются. Благодаря этому свойству сборки могут быть эффективным средством для управления ресурсами в крупных проектах.

  • Сведения о сборке можно получить программным путем с помощью отражения. Дополнительные сведения см. в статьях Отражение (C#) и Отражение (Visual Basic).

  • Сборку можно загрузить только для ее проверки, используя класс MetadataLoadContext в .NET Core и методы Assembly.ReflectionOnlyLoad или Assembly.ReflectionOnlyLoadFrom в .NET Core и .NET Framework.

Сборки в среде CLR

Сборки предоставляют сведения для среды CLR, которые нужны для распознавания реализаций типов. Для среды выполнения тип не существует вне контекста сборки.

Сборка определяет следующие сведения:

  • Код, выполняемый средой CLR. Имейте в виду, что каждая сборка может иметь только одну точку входа: DllMain, WinMain или Main.

  • Граница безопасности. Сборка представляет собой единицу, для которой запрашиваются и предоставляются разрешения. Дополнительные сведения о границах безопасности в сборках см. в разделе Вопросы безопасности сборок.

  • Граница типа. Каждое удостоверение типа включает имя сборки, в которой располагается данный тип. Тип с именем MyType, загруженный в области действия одной сборки, не совпадает с типом MyType, загруженным в области действия другой сборки.

  • Граница области действия ссылок. Манифест сборки содержит метаданные, используемые для разрешения типов и для выполнения связанных с ресурсами запросов. Манифест указывает типы и ресурсы, предоставляемые за пределами сборки, а также перечисляет другие сборки, от которых она зависит. При отсутствии связанного манифеста сборки код на промежуточном языке MSIL, находящийся в переносимом исполняемом (PE) файле, выполняться не будет.

  • Граница версий. Сборка является наименьшей единицей с поддержкой версий в среде CLR. Версия для всех типов и ресурсов в одной сборке назначается как единому целому. В манифесте сборки описываются зависимости определенных версий от других сборок. Дополнительные сведения об управлении версиями см. в разделе Управление версиями сборки.

  • Единица развертывания. При запуске приложения могут присутствовать лишь сборки, первоначально вызываемые приложением. Другие сборки, например, содержащие ресурсы локализации или вспомогательные классы, могут извлекаться по требованию. Это позволяет приложениям сохранять простую структуру и малый размер при первоначальном скачивании. Дополнительные сведения о развертывании сборок см. в разделе Развертывание приложений.

  • Единица параллельного выполнения. Дополнительные сведения о выполнении нескольких версий сборок см. в разделе Сборки и параллельное выполнение.

Создание сборки

Сборки могут быть статическими или динамическими. Статические сборки хранятся на диске в виде переносимых исполняемых (PE) файлов. Статические сборки могут включать интерфейсы, классы и ресурсы, такие как точечные рисунки, файлы JPEG и другие файлы ресурсов. Кроме того, можно создавать динамические сборки, которые запускаются непосредственно из памяти и не сохраняются на диск перед выполнением. Динамические сборки можно сохранить на диске после выполнения.

Существует несколько способов создания сборок. Можно использовать средства разработки, такие как Visual Studio, позволяющие создавать файлы DLL или EXE. Чтобы создать сборки с использованием модулей из других средств разработки, можно воспользоваться средствами из Windows SDK. Для создания динамических сборок также можно использовать интерфейсы CLR такие, как System.Reflection.Emit.

Скомпилируйте сборки, выполнив сборку в Visual Studio, с помощью средств интерфейса командной строки .NET Core или создав сборки .NET Framework с помощью компилятора командной строки. Дополнительные сведения о компиляции сборок с помощью .NET Core CLI см. в этой статье.

Примечание

Чтобы создать сборку в Visual Studio, выберите пункт Сборка в меню Сборка.

Манифест сборки

Каждая сборка имеет файл манифеста сборки. Манифест сборки выполняет роль оглавления и содержит следующее:

  • Идентификатор сборки (ее имя и версию).

  • Таблица с описанием всех файлов, входящих в сборку. Например, сюда относятся другие ваши сборки, от которых зависит файл EXE или DLL, а также растровые изображения или файлы сведений.

  • Список ссылок сборки, то есть список всех внешних зависимостей, таких как библиотеки DLL или другие файлы. Ссылки на сборки содержат ссылки на глобальные и частные объекты. Глобальные объекты доступны для всех других приложений. В .NET Core глобальные объекты связаны с определенной средой выполнения. В .NET Framework они расположены в глобальном кэше сборок (GAC). System.IO.dll служит примером сборки в глобальном кэше сборок. Закрытые объекты должны находиться в каталоге установки приложения или в одном из его подкаталогов.

Так как сборки содержат сведения о содержимом, версиях и зависимостях, работа связанных с ними приложений не зависит от внешних источников, таких как реестр в системах Windows. Сборки снижают риск конфликта библиотек DLL, а также повышают надежность и простоту развертывания приложений. Во многих случаях для установки приложения на базе .NET достаточно просто скопировать его файлы на целевой компьютер. Дополнительные сведения см. в разделе Манифест сборки.

Добавление ссылки на сборку

Чтобы использовать сборку в приложении, нужно добавить ссылку на нее. Когда вы добавите ссылку на сборку, в вашем приложении станут доступны все предоставленные в сборке типы, свойства, методы и другие члены пространств имен, как если бы их код являлся частью файла с исходным кодом вашего приложения.

Примечание

Ссылки на большинство сборок из библиотеки классов .NET создаются автоматически. Если системная сборка не упоминается в ссылке автоматически, для .NET Core можно добавить ссылку на пакет NuGet, содержащий эту сборку. Используйте диспетчер пакетов NuGet в Visual Studio или добавьте элемент <PackageReference> для сборки в файл проекта с расширением .csproj или .vbproj. В .NET Framework можно добавить ссылку на сборку с помощью диалогового окна Добавить ссылку в Visual Studio или параметра командной строки -reference для компиляторов C# или Visual Basic.

На C# вы можете использовать две версии одной и той же сборки в одном приложении. Дополнительные сведения см. в разделе Псевдоним extern.

Заголовок Описание
Содержимое сборок Элементы, составляющие сборку.
Манифест сборки Данные в манифесте сборки и способ их хранения в сборках.
Глобальный кэш сборок Способ сохранения и использования сборок в глобальном кэше сборок.
Сборки со строгими именами Характеристики сборок со строгими именами.
Вопросы безопасности сборок Обеспечение безопасности сборок.
Управление версиями сборок Общие сведения о политике управления версиями платформы .NET Framework.
Размещение сборок Вопросы размещения сборок.
Сборки и параллельное выполнение Использование нескольких версий среды выполнения или сборки.
Предоставление динамических методов и сборок Способы создания динамических сборок.
Обнаружение сборок в среде выполнения Способы разрешения платформой .NET Framework ссылок на сборки во время выполнения.

Справочник

System.Reflection.Assembly

См. также