Ensamblados de .NETAssemblies in .NET

Los ensamblados componen las unidades fundamentales de implementación, control de versiones, reutilización, ámbito de activación y permisos de seguridad para las aplicaciones basadas en .NET.Assemblies form the fundamental units of deployment, version control, reuse, activation scoping, and security permissions for .NET-based applications. Un ensamblado es una colección de tipos y recursos compilados para funcionar en conjunto y formar una unidad lógica de funcionalidad.An assembly is a collection of types and resources that are built to work together and form a logical unit of functionality. Los ensamblados adoptan la forma de un archivo ejecutable ( .exe) o de biblioteca de vínculos dinámicos ( .dll), y son los bloques de creación de las aplicaciones .NET.Assemblies take the form of executable (.exe) or dynamic link library (.dll) files, and are the building blocks of .NET applications. Proporcionan a Common Language Runtime la información necesaria para conocer las implementaciones de tipos.They provide the common language runtime with the information it needs to be aware of type implementations.

En .NET Core y .NET Framework, puede crear un ensamblado a partir de uno o varios archivos de código fuente.In .NET Core and .NET Framework, you can build an assembly from one or more source code files. En .NET Framework, los ensamblados pueden contener uno o varios módulos.In .NET Framework, assemblies can contain one or more modules. Esto permite que los proyectos más grandes se planeen para que varios desarrolladores individuales puedan trabajar en archivos de código fuente o módulos independientes, que se combinan para crear un ensamblado único.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. Para más información sobre los módulos, vea el tema Procedimiento para compilar un ensamblado de varios archivos.For more information about modules, see How to: Build a multifile assembly.

Los ensamblados tienen las propiedades siguientes:Assemblies have the following properties:

  • Los ensamblados se implementan como archivos .exe o .dll.Assemblies are implemented as .exe or .dll files.

  • Para las bibliotecas destinadas a .NET Framework, puede compartir los ensamblados entre aplicaciones si los coloca en la caché global de ensamblados (GAC).For libraries that target the .NET Framework, you can share assemblies between applications by putting them in the global assembly cache (GAC). Debe asignar nombres seguros a los ensamblados antes de poder incluirlos en la GAC.You must strong-name assemblies before you can include them in the GAC. Para obtener más información, vea Ensamblados con nombre seguro.For more information, see Strong-named assemblies.

  • Los ensamblados solo se cargan en memoria si son necesarios.Assemblies are only loaded into memory if they are required. Si no se usan, no se cargan.If they aren't used, they aren't loaded. Esto significa que los ensamblados pueden ser una manera eficaz de administrar recursos en proyectos más grandes.This means that assemblies can be an efficient way to manage resources in larger projects.

  • Mediante programación, puede obtener información sobre un ensamblado mediante reflexión.You can programmatically obtain information about an assembly by using reflection. Para más información, vea Reflexión (C#) o Reflexión (Visual Basic).For more information, see Reflection (C#) or Reflection (Visual Basic).

  • Puede cargar un ensamblado solo para inspeccionarlo mediante la clase MetadataLoadContext en .NET Core y los métodos Assembly.ReflectionOnlyLoad o Assembly.ReflectionOnlyLoadFrom en .NET Core y .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.

Ensamblados en Common Language RuntimeAssemblies in the common language runtime

Los ensamblados proporcionan a Common Language Runtime la información necesaria para conocer las implementaciones de tipos.Assemblies provide the common language runtime with the information it needs to be aware of type implementations. Para la ejecución, un tipo no existe fuera del contexto de un ensamblado.To the runtime, a type does not exist outside the context of an assembly.

Un ensamblado define la información siguiente:An assembly defines the following information:

  • El código que ejecuta Common Language Runtime.Code that the common language runtime executes. Tenga en cuenta que cada ensamblado solo puede tener un punto de entrada: DllMain, WinMain o Main.Note that each assembly can have only one entry point: DllMain, WinMain, or Main.

  • Límite de seguridad.Security boundary. Un ensamblado es la unidad en la que se solicitan y conceden los permisos.An assembly is the unit at which permissions are requested and granted. Para obtener más información sobre los límites de seguridad en los ensamblados, vea Consideraciones de seguridad sobre ensamblados.For more information about security boundaries in assemblies, see Assembly security considerations.

  • Límite de tipos.Type boundary. La identidad de cada tipo incluye el nombre del ensamblado en que reside.Every type's identity includes the name of the assembly in which it resides. Por ello, un tipo MyType cargado en el ámbito de un ensamblado no es igual que un tipo denominado MyType cargado en el ámbito de otro ensamblado.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.

  • Límite del ámbito de referencia.Reference scope boundary. El manifiesto del ensamblado contiene los metadatos que se usan para resolver tipos y satisfacer solicitudes de recursos.The assembly manifest has metadata that is used for resolving types and satisfying resource requests. En el manifiesto se especifican los tipos y recursos que se exponen fuera del ensamblado y se enumeran otros ensamblados de los que depende.The manifest specifies the types and resources to expose outside the assembly, and enumerates other assemblies on which it depends. El código del lenguaje intermedio de Microsoft (MSIL) de un archivo ejecutable portable (PE) no se ejecutará a menos que tenga un manifiesto del ensamblado asociado.Microsoft intermediate language (MSIL) code in a portable executable (PE) file won't be executed unless it has an associated assembly manifest.

  • Límite de versión.Version boundary. El ensamblado es la unidad versionable más pequeña de Common Language Runtime.The assembly is the smallest versionable unit in the common language runtime. Todos los tipos y recursos del mismo ensamblado tienen la misma versión, como una unidad.All types and resources in the same assembly are versioned as a unit. El manifiesto del ensamblado describe las dependencias de versión que especifique para los ensamblados dependientes.The assembly manifest describes the version dependencies you specify for any dependent assemblies. Para obtener más información sobre el control de versiones, vea Versiones de los ensamblados.For more information about versioning, see Assembly versioning.

  • Unidad de implementación.Deployment unit. Cuando se inicia una aplicación, sólo deben estar presentes los ensamblados a los que llama la aplicación inicialmente.When an application starts, only the assemblies that the application initially calls must be present. Los demás ensamblados, como los que contengan recursos de localización o clases de utilidad, se pueden recuperar a petición.Other assemblies, such as assemblies containing localization resources or utility classes, can be retrieved on demand. Esto permite que las aplicaciones sean sencillas y ligeras la primera vez que se descargan.This allows apps to be simple and thin when first downloaded. Para obtener más información sobre cómo implementar ensamblados, vea Implementación de aplicaciones.For more information about deploying assemblies, see Deploy applications.

  • Unidad de ejecución en paralelo.Side-by-side execution unit. Para obtener más información sobre la ejecución de varias versiones de un ensamblado, vea Ensamblados y ejecución en paralelo.For more information about running multiple versions of an assembly, see Assemblies and side-by-side execution.

Creación de un ensambladoCreate an assembly

Los ensamblados pueden ser estáticos o dinámicos.Assemblies can be static or dynamic. Los ensamblados estáticos se almacenan en el disco, en archivos ejecutables portables PE.Static assemblies are stored on disk in portable executable (PE) files. Los ensamblados estáticos pueden incluir interfaces, clases y recursos como mapas de bits, archivos JPEG y otros archivos de recursos.Static assemblies can include interfaces, classes, and resources like bitmaps, JPEG files, and other resource files. También puede crear ensamblados dinámicos, que se ejecutan directamente desde la memoria y no se guardan en el disco antes de su ejecución.You can also create dynamic assemblies, which are run directly from memory and aren't saved to disk before execution. Los ensamblados dinámicos se pueden guardar en el disco una vez que se hayan ejecutado.You can save dynamic assemblies to disk after they have executed.

Existen varias formas de crear ensamblados.There are several ways to create assemblies. Puede usar herramientas de desarrollo, como Visual Studio, que permite crear archivos .dll o .exe.You can use development tools, such as Visual Studio, that can create .dll or .exe files. Puede usar las herramientas de Windows SDK para crear ensamblados con módulos de otros entornos de programación.You can use tools in the Windows SDK to create assemblies with modules from other development environments. También puede utilizar las API de Common Language Runtime, como System.Reflection.Emit, para crear ensamblados dinámicos.You can also use common language runtime APIs, such as System.Reflection.Emit, to create dynamic assemblies.

Para compilar ensamblados puede hacerlo en Visual Studio, con las herramientas de la interfaz de la línea de comandos de .NET Core o, para los ensamblados de .NET Framework, con un compilador de línea de comandos.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. Para obtener más información sobre la compilación de ensamblados mediante herramientas de la interfaz de la línea de comandos de .NET, vea Herramientas de la interfaz de la línea de comandos de .NET Core.For more information about building assemblies using .NET Core command-line interface tools, see .NET Core command-line interface tools. Para compilar ensamblados con los compiladores de línea de comandos, vea Compilar la línea de comandos con csc.exe para C#, o bien Compilar desde la línea de comandos (Visual Basic) para Visual Basic.For building assemblies with the command-line compilers, see Command-line build with csc.exe for C#, or Build from the command line for Visual Basic.

Nota

Para compilar un ensamblado en Visual Studio, seleccione Compilar en el menú Compilar.To build an assembly in Visual Studio, on the Build menu, select Build.

Manifiesto del ensambladoAssembly manifest

Todos los ensamblados tienen un archivo de manifiesto del ensamblado.Every assembly has an assembly manifest file. De forma similar a una tabla de contenido, el manifiesto del ensamblado contiene lo siguiente:Similar to a table of contents, the assembly manifest contains:

  • La identidad del ensamblado (su nombre y versión).The assembly's identity (its name and version).

  • Una tabla de archivos en la que se describen todos los demás archivos que componen el ensamblado, como otros ensamblados que haya creado y en los que se basa el archivo .exe o .dll, archivos de mapa de bits o Léame.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.

  • Una lista de referencias de ensamblado, que es una lista de todas las dependencias externas, como archivos .dll o de otro tipo.An assembly reference list, which is a list of all external dependencies, such as .dlls or other files. Las referencias de ensamblado contienen referencias a objetos globales y privados.Assembly references contain references to both global and private objects. Los objetos globales están disponibles para todas las demás aplicaciones.Global objects are available to all other applications. En .NET Core, los objetos globales están acoplados con un runtime de .NET Core determinado.In .NET Core, global objects are coupled with a particular .NET Core runtime. En .NET Framework, los objetos globales residen en la caché global de ensamblados (GAC).In .NET Framework, global objects reside in the global assembly cache (GAC). System.IO.dll es un ejemplo de un ensamblado en la GAC.System.IO.dll is an example of an assembly in the GAC. Los objetos privados deben estar en un directorio del mismo nivel o debajo del directorio en el que se instala la aplicación.Private objects must be in a directory level at or below the directory in which your app is installed.

Como los ensamblados contienen información sobre contenido, control de versiones y dependencias, las aplicaciones que los usan no confían en orígenes externos, como el Registro de los sistemas Windows, para funcionar correctamente.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. Los ensamblados reducen los conflictos de .dll y hacen que las aplicaciones sean más confiables y fáciles de implementar.Assemblies reduce .dll conflicts and make your applications more reliable and easier to deploy. En muchos casos, puede instalar una aplicación basada en .NET con tan solo copiar sus archivos en el equipo de destino.In many cases, you can install a .NET-based application simply by copying its files to the target computer. Para obtener más información, vea Manifiesto del ensamblado.For more information, see Assembly manifest.

Incorporación de una referencia a un ensambladoAdd a reference to an assembly

Para usar un ensamblado en una aplicación, debe agregar una referencia a él.To use an assembly in an application, you must add a reference to it. Una vez que se hace referencia a un ensamblado, todos los tipos accesibles, propiedades, métodos y otros miembros de sus espacios de nombres están disponibles para la aplicación como si su código formara parte del archivo de origen.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.

Nota

La referencia a la mayoría de los ensamblados de la biblioteca de clases de .NET se hace automáticamente.Most assemblies from the .NET Class Library are referenced automatically. Si no se hace referencia a un ensamblado del sistema de forma automática, para .NET Core puede agregar una referencia al paquete NuGet que contiene el ensamblado.If a system assembly isn't automatically referenced, for .NET Core, you can add a reference to the NuGet package that contains the assembly. Use el administrador de paquetes NuGet de Visual Studio, o bien agregue un elemento <PackageReference> para el ensamblado al proyecto .csproj o .vbproj.Either use the NuGet Package Manager in Visual Studio, or add a <PackageReference> element for the assembly to the .csproj or .vbproj project. En .NET Framework, puede agregar una referencia al ensamblado mediante el cuadro de diálogo Agregar referencia de Visual Studio o mediante la opción de la línea de comandos -reference para los compiladores de C# o 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.

En C#, puede usar dos versiones del mismo ensamblado en una misma aplicación.In C#, you can use two versions of the same assembly in a single application. Para obtener más información, vea alias externo.For more information, see extern alias.

TitleTitle DESCRIPCIÓNDescription
Contenido de los ensambladosAssembly contents Elementos que componen un ensamblado.Elements that make up an assembly.
Manifiesto del ensambladoAssembly manifest Datos del manifiesto del ensamblado y cómo se almacenan en los ensamblados.Data in the assembly manifest, and how it is stored in assemblies.
Caché global de ensambladosGlobal assembly cache Cómo almacena y usa los ensamblados la GAC.How the GAC stores and uses assemblies.
Ensamblados con nombre seguroStrong-named assemblies Características de los ensamblados con nombre seguro.Characteristics of strong-named assemblies.
Consideraciones de seguridad sobre ensambladosAssembly security considerations Cómo funciona la seguridad de los ensamblados.How security works with assemblies.
Control de versiones de los ensambladosAssembly versioning Información general sobre la directiva de control de versiones de .NET Framework.Overview of the .NET Framework versioning policy.
Colocación de ensambladosAssembly placement Dónde ubicar los ensamblados.Where to locate assemblies.
Ensamblados y ejecución en paraleloAssemblies and side-by-side execution Uso de varias versiones del runtime o de un ensamblado simultáneamente.Use multiple versions of the runtime or an assembly simultaneously.
Emitir métodos y ensamblados dinámicosEmit dynamic methods and assemblies Cómo crear ensamblados dinámicos.How to create dynamic assemblies.
Cómo el motor en tiempo de ejecución ubica ensambladosHow the runtime locates assemblies Cómo resuelve .NET Framework las referencias de ensamblado en tiempo de ejecución.How the .NET Framework resolves assembly references at run time.

ReferenciaReference

System.Reflection.Assembly

Vea tambiénSee also