¿Qué es exactamente un ensamblado en C # o .NET?

102

¿Podría explicar qué es un ensamblado en C # o .NET?

  1. ¿Dónde comienza y dónde termina?
  2. ¿Qué información importante debo saber sobre los ensamblajes?
Roee Adler
fuente
5
Estrictamente hablando, ¿no es un ensamblado un concepto de .NET en lugar de un concepto de C #?
JeffH
14
@JeffH: cuando hice la pregunta pensé que era un concepto de C #. Ahora entiendo que es .NET. Sin embargo, como creo que otras personas pueden estar confundidas como yo, no lo
cambié

Respuestas:

114

Un ensamblado es la salida compilada de su código, generalmente una DLL, pero su EXE también es un ensamblado. Es la unidad de implementación más pequeña para cualquier proyecto .NET.

El ensamblado normalmente contiene código .NET en MSIL (lenguaje intermedio de Microsoft) que se compilará en código nativo ("JITted", compilado por el compilador Just-In-Time) la primera vez que se ejecute en una máquina determinada. Ese código compilado también se almacenará en el ensamblado y se reutilizará en llamadas posteriores.

El ensamblaje también puede contener recursos como iconos, mapas de bits, tablas de cadenas, etc. Además, el ensamblado también contiene metadatos en el manifiesto del ensamblado: información como número de versión, nombre seguro, cultura, ensamblados referenciados, etc.

En el 99% de sus casos, un ensamblaje equivale a un archivo físico en el disco; el caso de un ensamblaje de varios archivos (un ensamblaje, distribuido en más de un solo archivo) parece ser un caso de borde bastante extraño que he nunca he encontrado hasta ahora en mis más de 5 años de desarrollo .NET.

En un ensamblado de múltiples archivos, solo habría un manifiesto de ensamblado en una DLL o EXE y el código MSIL en varios archivos netmodule.

marc_s
fuente
1
@marc_s: Creo que te refieres a un archivo de ensamblaje múltiple. Es posible empaquetar múltiples ensamblajes dentro de un solo archivo a través de las herramientas de línea de comandos de Studio, pero no directamente a través del IDE.
Greg D
5
Una cosa muy importante en un ensamblado son los metadatos en el manifiesto del ensamblado. El manifiesto tiene información como versión, nombre seguro, cultura, ensamblados referenciados, etc. En un ensamblado de múltiples archivos, todavía habría un solo manifiesto de ensamblado en un dll o exe y el código MSIL en varios archivos .netmodule. Básicamente, un ensamblaje es la unidad mínima de implementación en> net
softveda
@marc_s: Le agradecería que agregara el punto de @ Pratik a la respuesta, gracias
Roee Adler
@rax: hecho; @pratik: ahora me estás confundiendo: hablas de "ensamblaje de múltiples archivos" de nuevo, mientras que @GregD mencionó que realmente era un "archivo de ensamblaje múltiple". ¿Qué es ahora? (como dije, nunca me he encontrado con una bestia así, así que no tengo claro si se trata de múltiples ensamblajes por archivo o múltiples archivos por ensamblaje ...)
marc_s
3
"Ese código compilado también se almacenará en el ensamblado y se reutilizará en llamadas posteriores". Esto es engañoso y / o no muy claro. Ningún código compilado se "almacena" en un ensamblado. Creo que puede que se esté refiriendo a la forma en que cada método / función se "ajusta" al código nativo cuando se llama por primera vez. Luego, mientras el ensamblado está en la memoria, se llama a la versión de código nativo del método. Si el ensamblaje se descarga y luego se vuelve a cargar, el proceso de jit volverá a ocurrir. Por supuesto, esto supone que no está utilizando NGEN para precompilar sus ensamblados en código nativo (no recomendado).
Ash
13

Ensamblado .NET

En el marco de Microsoft .NET, un ensamblado es una biblioteca de código parcialmente compilada para su uso en implementación, control de versiones y seguridad.


fuente
7

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

Un ensamblado es un archivo que el compilador genera automáticamente después de la compilación exitosa de cada aplicación .NET. Puede ser una biblioteca de vínculos dinámicos o un archivo ejecutable. Se genera solo una vez para una aplicación y en cada compilación posterior, el ensamblado se actualiza.

Raghav
fuente
2
Los ensamblados son distintos de los archivos que los contienen.
Greg D
1
@Raghav - ¡Actualiza tu fotografía con algo casual, por el amor de Dios! ¡No vamos a posar aquí para los pasaportes, sabes!
TheFlash
3

Aquí hay otra explicación de la composición de .NET Assemblies, una minicita:

El marco .NET consta de los conceptos de módulos, ensamblados, que almacenan metadatos e información de manifiesto. Un conjunto puede contener varios módulos. Visual C # solo crea un módulo que el compilador de C # (csc.exe) convierte en un ensamblado, pero un ensamblado puede vincular muchos módulos .NET a través de la herramienta de línea de comandos del enlazador de ensamblado (al.exe). Por ejemplo, cada uno de los archivos .cs de su código fuente podría compilarse en un módulo y vincularse para formar un ensamblado; un ensamblado es solo una colección de módulos y recursos. Sin embargo, uno de estos módulos; debe contener información de metadatos de manifiesto (ver más abajo) para que CLR entienda el ensamblado.
....
Habiendo creado un nuevo .exe o .dll dentro de VS.NET, verá que su archivo aparece dentro de su carpeta bin. Al abrirlo en el bloc de notas, se emitirá un galimatías, o incluso dentro de un editor hexadecimal sin conocer la estructura del archivo, necesita una herramienta como ildasm.exe o CFF Explorer para darle sentido. La estructura del conjunto es la siguiente:

Encabezado PE
Encabezado
CLR Metadatos
CLR
Código IL CLR
Datos nativos

Chris S
fuente
¿A dónde diablos me lleva ese enlace? ¡Una especie de redireccionamientos infinitos! Después de algunas redirecciones, me llevó a una página que dice esto . Tampoco hay forma de obtener la URL original que publicaste.
Sнаđошƒаӽ
2

La respuesta está en orden de comprensión inmediata.

En pocas palabras, es el proyecto compilado que involucra sus clases y archivos adicionales, si los hay. Es decir, cada proyecto de una solución es ensamblado .

O más técnicamente,

Un ensamblado es donde se almacena un tipo en el sistema de archivos. Los ensamblados son un mecanismo para implementar código. Por ejemplo, el System.Data.dll ensamblaje contiene tipos para administrar datos. Para utilizar tipos en otros ensamblados, se debe hacer referencia a ellos. - fuente

Como lo sabemos? Si echa un vistazo a las propiedades de un proyecto en la solución observa las , puede ver las siguientes imágenes.

Cuando compila el proyecto, resulta en DLL o EXE .

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

snr
fuente
1

Cuando el compilador del lenguaje compila un código fuente, genera un ensamblado administrado y MSIL (MisroSoft Intermediate Language). Ese ensamblado contiene un archivo .dll o .exe . Un ensamblado puede ser de dos tipos: ensamblado privado y ensamblado compartido, el ensamblado compartido se almacena en GAC (caché de ensamblado global) para que cualquier aplicación pueda hacer referencia a él, mientras que el ensamblaje privado se almacena en la carpeta de la aplicación que puede ser utilizada por una sola aplicación.

gaurav patni
fuente
0

Un ensamblado es un archivo DLL o EXE que se creará cuando lo publique o compile su aplicación.

Anup Shetty
fuente
0

Una Asamblea es una colección de unidades lógicas. Las unidades lógicas se refieren a los tipos y recursos que se requieren para construir una aplicación e implementarlos usando el marco .Net. Básicamente, Assembly es una colección de Exe y DLL. Es portátil y ejecutable.

Abhay.Patil
fuente
-1

Después de escribir el código fuente de su programa (proyecto), se crea un archivo que puede ser DLL o EXE dependiendo de su proyecto. Hace solo una vez para un solo proyecto. Tiene dos tipos 1: - simple 2: - conjunto único compartido o multiprograma que se usa solo en un solo programa, mientras que el compartido se puede usar para multiprograma

kirti kant pareek
fuente
Después de escribir el código fuente de su programa (proyecto), se crea un archivo que puede ser DLL o EXE dependiendo de su proyecto , ¿después de escribir el código fuente? No parece ser una muy buena indicación de cuándo se crea ese archivo, lo cual, por cierto, es irrelevante dada la pregunta.
Sнаđошƒаӽ