¿Espacio de nombres o ensamblado?

83

Me estoy confundiendo mucho entre espacios de nombres y ensamblados. ¿Son System.Datay System.Webespacios de nombres o ensamblados?

He notado que estos se denominan espacios de nombres y, al mismo tiempo, están presentes en la GAC_32carpeta. Entonces, ¿qué son exactamente?

usuario3125433
fuente
1
Consulte stackoverflow.com/questions/668161/… que podría ayudar un poco.
pswg

Respuestas:

102

System.Dataes un espacio de nombres , System.Data.DLL(el archivo) es un ensamblado .

Un espacio de nombres es una agrupación lógica de tipos (principalmente para evitar colisiones de nombres). Un ensamblado puede contener tipos en varios espacios de nombres ( System.DLLcontiene algunos ...) y un solo espacio de nombres se puede distribuir entre ensamblajes (p System.Threading. Ej .).

D Stanley
fuente
2
¿Cómo especificamos qué espacio de nombres estar en qué ensamblado?
Ehsan Sajjad
@EhsanSajjad No existe una relación directa entre los dos. Un ensamblado se crea a partir de archivos de código (generalmente a través de un proyecto), cada uno de los cuales contiene clases que están en un espacio de nombres. Entonces, indirectamente, lo decide eligiendo qué archivos están en un proyecto. Si eso no ayuda, no dude en hacer una nueva pregunta.
D Stanley
que tiene sentido. ¡¡Gracias!!
Ehsan Sajjad
@EhsanSajjad, usando la namespaceinstrucción C # (o equivalente en otro lenguaje .NET) en el código fuente que se compila para crear su ensamblado. Tenga en cuenta que es posible que un segundo ensamblado vuelva a abrir un espacio de nombres y le agregue más clases.
Concrete Gannet
59

El espacio de nombres es una agrupación lógica de clases que pertenece a la misma funcionalidad. Por lo tantoSystem.Web, ySystem.Datason espacios de nombres

MSDN lo describe como:

Los espacios de nombres se utilizan mucho en la programación C # de dos formas. Primero, .NET Framework usa espacios de nombres para organizar sus muchas clases. En segundo lugar, declarar sus propios espacios de nombres puede ayudar a controlar el alcance de los nombres de clases y métodos en proyectos de programación más grandes.

espacio de nombres

El ensamblaje es un fragmento de código (precompilado) que puede ser ejecutado por el entorno de ejecución .NET. Contiene uno o más espacios de nombres. Un programa .NET consta de uno o más ensamblados.

System.Web.dlly System.Data.dllson asambleas.

MSDN lo describe como:

Los ensamblados son los componentes básicos de las aplicaciones .NET Framework; forman la unidad fundamental de implementación, control de versiones, reutilización, alcance de activación y permisos de seguridad. Un ensamblado es una colección de tipos y recursos que se crean para trabajar juntos y formar una unidad lógica de funcionalidad. Un ensamblado proporciona al Common Language Runtime la información que necesita para conocer las implementaciones de tipos. Para el tiempo de ejecución, un tipo no existe fuera del contexto de un ensamblado.

montaje

Zaheer Ahmed
fuente
¿Dos caminos? ¿Dónde está el segundo? :)
Jugal Thakkar
1
@JugalThakkar también lo agregó. consulte aquí para obtener más detalles.
Zaheer Ahmed
Para decirlo de manera ligeramente diferente: los espacios de nombres tienen dos propósitos. Una es proporcionar una "tabla de contenido" jerárquica para los tipos, de modo que pueda localizarlos o descubrirlos más fácilmente. Si puede recordar el nombre del espacio de nombres, IntelliSense le ofrece una breve lista de sus tipos. El segundo propósito es gestionar y evitar conflictos de nombres. Si puede evitar los espacios de nombres "Sistema", "Microsoft" y "Windows", sabrá que ninguno de sus tipos chocará con los de Microsoft.
Concrete Gannett
16

En breve:

Montaje:

Un ensamblado proporciona una unidad fundamental de agrupación de código físico, es una unidad de salida. Es una unidad de implementación y una unidad de control de versiones. Los ensamblados contienen código MSIL.

Espacio de nombres:

Un espacio de nombres proporciona una unidad fundamental de agrupación de código lógico. Es una colección de nombres donde en cada nombre es Único. Forman el límite lógico para un Grupo de clases. El espacio de nombres debe especificarse en Propiedades del proyecto.

Anurag Jain
fuente
15

En breve:

  • El ensamblado se almacena como archivos .EXE o .DLL.
  • El espacio de nombres es una forma de agrupar nombres de tipos y reducir la posibilidad de colisiones de nombres.

Consejos.

Un ensamblado contiene una colección de tipos (por ejemplo, l'assembly System contiene muchos espacios de nombres incluidos System, System.IO, ecc). Por lo general, el nombre del ensamblado es el mismo que el de un espacio de nombres que contiene, pero no siempre.

Otro ejemplo de ensamblados y espacios de nombres.

Ensamblaje 1 ( CoreAssembly.DLL )

Contiene espacios de nombres Namespace1.subnamespace1

Ensamblaje 2 ( ExtensionCoreAssembly.DLL )

Contiene espacios de nombres Namespace1.subnamespace1

Es posible usar el nombre del ensamblado que contiene diferentes espacios de nombres y extender un ensamblado existente con otro ensamblado mediante esta técnica.

DEFINICIONES.

Ensambles

Un ensamblado es una colección de tipos y recursos que forma una unidad lógica de funcionalidad. Todos los tipos de .NET Framework deben existir en ensamblados; Common Language Runtime no admite tipos fuera de ensamblados. Cada vez que crea una aplicación de Microsoft Windows®, un servicio de Windows, una biblioteca de clases u otra aplicación con Visual Basic .NET, está creando un solo ensamblaje. Cada ensamblado se almacena como un archivo .exe o .dll. Nota Aunque es técnicamente posible crear ensamblajes que abarquen varios archivos, no es probable que utilice esta tecnología en la mayoría de las situaciones.

Espacios de nombres

Otra forma de organizar su código de Visual Basic .NET es mediante el uso de espacios de nombres. Los espacios de nombres no sustituyen a los ensamblados, sino un segundo método organizativo que complementa los ensamblados. Los espacios de nombres son una forma de agrupar nombres de tipos y reducir la posibilidad de colisiones de nombres. Un espacio de nombres puede contener otros tipos y espacios de nombres. El nombre completo de un tipo incluye la combinación de espacios de nombres que contienen ese tipo.

Enlace: http://msdn.microsoft.com/en-us/library/ms973231.aspx

amdluigi
fuente
14

Son espacios de nombres. Los ensamblados contienen más de un espacio de nombres. Por ejemplo: System.dllcontiene estos espacios de nombres (y más):

ingrese la descripción de la imagen aquí

Además, un espacio de nombres puede contener espacios de nombres anidados. Son solo nombres lógicos para organizar el código. Solo tenga en cuenta que los DLLarchivos son ensamblados que contienen espacios de nombres.

GACes caché de ensamblados global . Según MSDN:

La caché de ensamblados global almacena ensamblados específicamente designados para ser compartidos por varias aplicaciones en la computadora.

Por lo tanto, los ensamblados de uso común se almacenan en el GACy, por lo tanto, no necesita copiar todos los archivos de ensamblaje en el directorio de su proyecto al que hace referencia desde su proyecto. Los ensamblados almacenados en el GACson ensamblados con nombre seguro. Normalmente, cuando agrega una referencia a un El ensamblaje de su proyecto que no es Strong-Nameduna copia de su .dllarchivo se creará en su bin\Debugcarpeta. Si lo desea, puede hacer que su ensamblado (proyecto de biblioteca de clases, por ejemplo) tenga un nombre seguro. Consulte: Cómo: Firmar un ensamblaje con un Nombre

Selman Genç
fuente
Entonces, ¿quién o qué determina más de una asamblea? Creo un proyecto con un montón de espacios de nombres. ¿Qué decide cuántos ensamblados se crean y qué espacios de nombres van bajo qué ensamblados?
eaglei22
11

Otros han dado respuestas muy buenas y detalladas a esta pregunta. Pero quiero señalar que cuando no esté seguro, puede buscar en MSDN. La biblioteca de MSDN explica de forma muy clara y sencilla el espacio de nombres y el ensamblado en el que reside un tipo determinado. Incluso dice el nombre del archivo (in System.Data.dll)para que no haya ambigüedad.

ingrese la descripción de la imagen aquí

bouvierr
fuente
9

El archivo que ve en GAC es System.Data.dllque es un ensamblado y contiene espacios de nombres, incluidos System.Data. Si ve las propiedades de referencia en Visual Studio, verá:

ingrese la descripción de la imagen aquí

Más adelante, si hace clic con el botón derecho en la referencia y selecciona la vista en el navegador de objetos, verá espacios de nombres en ese ensamblado en particular.

ingrese la descripción de la imagen aquí

Habib
fuente
2
Gracias ... muy buena explicación ... :)
user3125433
6

Como dice @amdluigi, "Normalmente, el nombre del ensamblado es el mismo que el de un espacio de nombres que contiene, pero no siempre".

Hay una captura de pantalla arriba de System.Data.dll en el Explorador de objetos en Studio. Es un excelente ejemplo para explorar los problemas aquí. Tenga en cuenta que la mayoría de los espacios de nombres contenidos en el ensamblado son System.Data o un sub-espacio de nombres de System.Data.

En general, es una buena práctica que los nombres de ensamblados estén relacionados con los espacios de nombres dentro de ellos. Observe que cuando Studio crea por primera vez un proyecto para construir un ensamblado, una de las propiedades del proyecto es un espacio de nombres predeterminado. Al principio, Studio le da al espacio de nombres predeterminado el mismo nombre que el proyecto en sí. Si alguna vez elige cambiar el nombre de un proyecto, considere cambiar también su espacio de nombres predeterminado.

Hay dos espacios de nombres adicionales: Microsoft.SqlServer es comprensible. Algunos tipos de SQL Server que no querían empaquetar en un ensamblado separado.

Pero, ¿qué pasa con System.Xml ???? Hay un ensamblado System.Xml.dll. ¿Por qué este espacio de nombres también aparece en System.Data.dll?

Observe que un ensamblado puede reabrir un espacio de nombres y agregarle más; eso es exactamente lo que hace System.Data.dll con el espacio de nombres System.Xml.

La razón es que los espacios de nombres no tienen implicaciones de rendimiento, pero los ensamblados sí. Si tiene 1000 clases con cantidades sustanciales de código, no desea un ensamblado con una huella de memoria muy grande. Tampoco quieres 1000 ensamblajes cada uno con una clase. Cualquier ensamblado debe cargarse en la memoria antes de que se pueda ejecutar su contenido. Desea que un ensamblado contenga una cantidad razonable de clases interrelacionadas, por lo que una vez que su aplicación ha cargado un ensamblado para obtener una de sus clases, obtiene otras clases que es probable que la aplicación necesite de forma gratuita. La granularidad es importante: ni demasiado grande, ni demasiado pequeña, simplemente correcta.

Observe que System.Data.dll vuelve a abrir System.Xml y agrega exactamente una clase: XmlDataDocument. Sucede que esta clase se usa para interpretar datos relacionales como un documento XML. Si su aplicación solo usa XML, no necesitará esta clase. Si su aplicación trata con datos relacionales, podría hacerlo. Entonces, mientras XmlDataDocument hereda de XmlDocument y está en el espacio de nombres System.Xml, está empaquetado en el ensamblado System.Data.dll.

Todo esto es particularmente importante si tiene experiencia con Java, donde solo hay un concepto, el paquete. En .NET hay dos, el ensamblado y el espacio de nombres. Los dos son ortogonales. Obviamente, un ensamblado puede contener más de un espacio de nombres. Un ensamblado puede volver a abrir un espacio de nombres y agregarle más; en otras palabras, los tipos en un espacio de nombres pueden abarcar más de un ensamblado.

Alcatraz de hormigón
fuente
3

El ensamblaje es una agrupación física de unidades lógicas, espacio de nombres, clases de grupos lógicos.

El espacio de nombres puede abarcar varios ensamblados

madhura
fuente