Сборки в .NET Assemblies in .NET
Сборки представляют собой базовые элементы развертывания, управления версиями, повторного использования, назначения областей активации и прав доступа для приложений на основе платформы .NET. Assemblies form the fundamental units of deployment, version control, reuse, activation scoping, and security permissions for .NET-based applications. Сборка представляет собой коллекцию типов и ресурсов, собранных для совместной работы и образующих логическую функциональную единицу. An assembly is a collection of types and resources that are built to work together and form a logical unit of functionality. Сборки создаются в виде исполняемого файла (EXE) или файла библиотеки динамической компоновки (DLL) и являются стандартными блоками приложений .NET. Assemblies take the form of executable (.exe) or dynamic link library (.dll) files, and are the building blocks of .NET applications. Они предоставляют сведения для среды CLR, которые нужны для распознавания реализаций типов. They provide the common language runtime with the information it needs to be aware of type implementations.
В .NET Core и .NET Framework сборку можно создать из одного или нескольких файлов исходного кода. In .NET Core and .NET Framework, you can build an assembly from one or more source code files. В .NET Framework сборки могут содержать один или несколько модулей. In .NET Framework, assemblies can contain one or more modules. Благодаря этому в крупных проектах несколько разработчиков могут работать с отдельными файлами или модулями исходного кода, которые вместе образуют единую сборку. This allows larger projects to be planned so that several developers can work on separate source code files or modules, which are combined to create a single assembly. Дополнительные сведения см. в статье Практическое Создание многофайловой сборки. For more information about modules, see How to: Build a multifile assembly.
Сборки имеют следующие свойства. Assemblies have the following properties:
Сборки реализованы как файлы EXE или DLL. Assemblies are implemented as .exe or .dll files.
Для библиотек, предназначенных для .NET Framework, сборки можно совместно использовать в нескольких приложениях, поместив их в глобальный кэш сборок (GAC). For libraries that target the .NET Framework, you can share assemblies between applications by putting them in the global assembly cache (GAC). Прежде чем включить сборки в глобальный кэш сборок, нужно назначить им строгие имена. You must strong-name assemblies before you can include them in the GAC. Подробнее см. в разделе Сборки со строгими именами. For more information, see Strong-named assemblies.
Сборки загружаются в память только в том случае, если они реально используются. Assemblies are only loaded into memory if they are required. Если они не используются, то они не загружаются. If they aren’t used, they aren’t loaded. Благодаря этому свойству сборки могут быть эффективным средством для управления ресурсами в крупных проектах. This means that assemblies can be an efficient way to manage resources in larger projects.
Сведения о сборке можно получить программным путем с помощью отражения. You can programmatically obtain information about an assembly by using reflection. Дополнительные сведения см. в статьях Отражение (C#) и Отражение (Visual Basic). For more information, see Reflection (C#) or Reflection (Visual Basic).
Сборку можно загрузить только для ее проверки, используя класс MetadataLoadContext в .NET Core и методы Assembly.ReflectionOnlyLoad или Assembly.ReflectionOnlyLoadFrom в .NET Core и .NET Framework. You can load an assembly just to inspect it by using the MetadataLoadContext class in .NET Core and the Assembly.ReflectionOnlyLoad or Assembly.ReflectionOnlyLoadFrom methods in .NET Core and .NET Framework.
Сборки в среде CLR Assemblies in the common language runtime
Сборки предоставляют сведения для среды CLR, которые нужны для распознавания реализаций типов. Assemblies provide the common language runtime with the information it needs to be aware of type implementations. Для среды выполнения тип не существует вне контекста сборки. To the runtime, a type does not exist outside the context of an assembly.
Сборка определяет следующие сведения: An assembly defines the following information:
Код, выполняемый средой CLR. Code that the common language runtime executes. Имейте в виду, что каждая сборка может иметь только одну точку входа: DllMain , WinMain или Main . Note that each assembly can have only one entry point: DllMain , WinMain , or Main .
Граница безопасности. Security boundary. Сборка представляет собой единицу, для которой запрашиваются и предоставляются разрешения. An assembly is the unit at which permissions are requested and granted. Дополнительные сведения о границах безопасности в сборках см. в разделе Вопросы безопасности сборок. For more information about security boundaries in assemblies, see Assembly security considerations.
Граница типа. Type boundary. Каждое удостоверение типа включает имя сборки, в которой располагается данный тип. Every type’s identity includes the name of the assembly in which it resides. Тип с именем MyType , загруженный в области действия одной сборки, не совпадает с типом MyType , загруженным в области действия другой сборки. A type called MyType that is loaded in the scope of one assembly is not the same as a type called MyType that is loaded in the scope of another assembly.
Граница области действия ссылок. Reference scope boundary. Манифест сборки содержит метаданные, используемые для разрешения типов и для выполнения связанных с ресурсами запросов. The assembly manifest has metadata that is used for resolving types and satisfying resource requests. Манифест указывает типы и ресурсы, предоставляемые за пределами сборки, а также перечисляет другие сборки, от которых она зависит. The manifest specifies the types and resources to expose outside the assembly, and enumerates other assemblies on which it depends. При отсутствии связанного манифеста сборки код на промежуточном языке MSIL, находящийся в переносимом исполняемом (PE) файле, выполняться не будет. Microsoft intermediate language (MSIL) code in a portable executable (PE) file won’t be executed unless it has an associated assembly manifest.
Граница версий. Version boundary. Сборка является наименьшей единицей с поддержкой версий в среде CLR. The assembly is the smallest versionable unit in the common language runtime. Версия для всех типов и ресурсов в одной сборке назначается как единому целому. All types and resources in the same assembly are versioned as a unit. В манифесте сборки описываются зависимости определенных версий от других сборок. The assembly manifest describes the version dependencies you specify for any dependent assemblies. Дополнительные сведения об управлении версиями см. в разделе Управление версиями сборки. For more information about versioning, see Assembly versioning.
Единица развертывания. Deployment unit. При запуске приложения могут присутствовать лишь сборки, первоначально вызываемые приложением. When an application starts, only the assemblies that the application initially calls must be present. Другие сборки, например, содержащие ресурсы локализации или вспомогательные классы, могут извлекаться по требованию. Other assemblies, such as assemblies containing localization resources or utility classes, can be retrieved on demand. Это позволяет приложениям сохранять простую структуру и малый размер при первоначальном скачивании. This allows apps to be simple and thin when first downloaded. Дополнительные сведения о развертывании сборок см. в разделе Развертывание приложений. For more information about deploying assemblies, see Deploy applications.
Единица параллельного выполнения. Side-by-side execution unit. Дополнительные сведения о выполнении нескольких версий сборок см. в разделе Сборки и параллельное выполнение. For more information about running multiple versions of an assembly, see Assemblies and side-by-side execution.
Создание сборки Create an assembly
Сборки могут быть статическими или динамическими. Assemblies can be static or dynamic. Статические сборки хранятся на диске в виде переносимых исполняемых (PE) файлов. Static assemblies are stored on disk in portable executable (PE) files. Статические сборки могут включать интерфейсы, классы и ресурсы, такие как точечные рисунки, файлы JPEG и другие файлы ресурсов. Static assemblies can include interfaces, classes, and resources like bitmaps, JPEG files, and other resource files. Кроме того, можно создавать динамические сборки, которые запускаются непосредственно из памяти и не сохраняются на диск перед выполнением. You can also create dynamic assemblies, which are run directly from memory and aren’t saved to disk before execution. Динамические сборки можно сохранить на диске после выполнения. You can save dynamic assemblies to disk after they have executed.
Существует несколько способов создания сборок. There are several ways to create assemblies. Можно использовать средства разработки, такие как Visual Studio, позволяющие создавать файлы DLL или EXE. You can use development tools, such as Visual Studio, that can create .dll or .exe files. Чтобы создать сборки с использованием модулей из других средств разработки, можно воспользоваться средствами из Windows SDK. You can use tools in the Windows SDK to create assemblies with modules from other development environments. Для создания динамических сборок также можно использовать интерфейсы CLR такие, как System.Reflection.Emit. You can also use common language runtime APIs, such as System.Reflection.Emit, to create dynamic assemblies.
Скомпилируйте сборки, выполнив сборку в Visual Studio, с помощью средств интерфейса командной строки .NET Core или создав сборки .NET Framework с помощью компилятора командной строки. Compile assemblies by building them in Visual Studio, building them with .NET Core command-line interface tools, or building .NET Framework assemblies with a command-line compiler. Дополнительные сведения о компиляции сборок с помощью .NET Core CLI см. в этой статье. For more information about building assemblies using .NET Core CLI, see .NET Core CLI overview.
Чтобы создать сборку в Visual Studio, выберите пункт Сборка в меню Сборка. To build an assembly in Visual Studio, on the Build menu, select Build.
Манифест сборки Assembly manifest
Каждая сборка имеет файл манифеста сборки. Every assembly has an assembly manifest file. Манифест сборки выполняет роль оглавления и содержит следующее: Similar to a table of contents, the assembly manifest contains:
Идентификатор сборки (ее имя и версию). The assembly’s identity (its name and version).
Таблица с описанием всех файлов, входящих в сборку. Например, сюда относятся другие ваши сборки, от которых зависит файл EXE или DLL, а также растровые изображения или файлы сведений. A file table describing all the other files that make up the assembly, such as other assemblies you created that your .exe or .dll file relies on, bitmap files, or Readme files.
Список ссылок сборки, то есть список всех внешних зависимостей, таких как библиотеки DLL или другие файлы. An assembly reference list, which is a list of all external dependencies, such as .dll s or other files. Ссылки на сборки содержат ссылки на глобальные и частные объекты. Assembly references contain references to both global and private objects. Глобальные объекты доступны для всех других приложений. Global objects are available to all other applications. В .NET Core глобальные объекты связаны с определенной средой выполнения. In .NET Core, global objects are coupled with a particular .NET Core runtime. В .NET Framework они расположены в глобальном кэше сборок (GAC). In .NET Framework, global objects reside in the global assembly cache (GAC). System.IO.dll служит примером сборки в глобальном кэше сборок. System.IO.dll is an example of an assembly in the GAC. Закрытые объекты должны находиться в каталоге установки приложения или в одном из его подкаталогов. Private objects must be in a directory level at or below the directory in which your app is installed.
Так как сборки содержат сведения о содержимом, версиях и зависимостях, работа связанных с ними приложений не зависит от внешних источников, таких как реестр в системах Windows. Because assemblies contain information about content, versioning, and dependencies, the applications that use them needn’t rely on external sources, such as the registry on Windows systems, to function properly. Сборки снижают риск конфликта библиотек DLL, а также повышают надежность и простоту развертывания приложений. Assemblies reduce .dll conflicts and make your applications more reliable and easier to deploy. Во многих случаях для установки приложения на базе .NET достаточно просто скопировать его файлы на целевой компьютер. In many cases, you can install a .NET-based application simply by copying its files to the target computer. Дополнительные сведения см. в разделе Манифест сборки. For more information, see Assembly manifest.
Добавление ссылки на сборку Add a reference to an assembly
Чтобы использовать сборку в приложении, нужно добавить ссылку на нее. To use an assembly in an application, you must add a reference to it. Когда вы добавите ссылку на сборку, в вашем приложении станут доступны все предоставленные в сборке типы, свойства, методы и другие члены пространств имен, как если бы их код являлся частью файла с исходным кодом вашего приложения. Once an assembly is referenced, all the accessible types, properties, methods, and other members of its namespaces are available to your application as if their code were part of your source file.
Ссылки на большинство сборок из библиотеки классов .NET создаются автоматически. Most assemblies from the .NET Class Library are referenced automatically. Если системная сборка не упоминается в ссылке автоматически, для .NET Core можно добавить ссылку на пакет NuGet, содержащий эту сборку. If a system assembly isn’t automatically referenced, for .NET Core, you can add a reference to the NuGet package that contains the assembly. Используйте диспетчер пакетов NuGet в Visual Studio или добавьте элемент
element for the assembly to the .csproj or .vbproj project. В .NET Framework можно добавить ссылку на сборку с помощью диалогового окна Добавить ссылку в Visual Studio или параметра командной строки -reference для компиляторов C# или Visual Basic. In .NET Framework, you can add a reference to the assembly by using the Add Reference dialog in Visual Studio, or by using the -reference command line option for the C# or Visual Basic compilers.
На C# вы можете использовать две версии одной и той же сборки в одном приложении. In C#, you can use two versions of the same assembly in a single application. Дополнительные сведения см. в разделе Псевдоним extern. For more information, see extern alias.