Me estoy confundiendo mucho entre espacios de nombres y ensamblados. ¿Son System.Data
y System.Web
espacios de nombres o ensamblados?
He notado que estos se denominan espacios de nombres y, al mismo tiempo, están presentes en la GAC_32
carpeta. Entonces, ¿qué son exactamente?
c#
.net
namespaces
assemblies
usuario3125433
fuente
fuente
Respuestas:
System.Data
es 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.DLL
contiene algunos ...) y un solo espacio de nombres se puede distribuir entre ensamblajes (pSystem.Threading
. Ej .).fuente
namespace
instrucció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.El espacio de nombres es una agrupación lógica de clases que pertenece a la misma funcionalidad. Por lo tanto
System.Web
, ySystem.Data
son espacios de nombresMSDN lo describe como:
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.dll
ySystem.Data.dll
son asambleas.MSDN lo describe como:
fuente
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.
fuente
En breve:
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
fuente
Son espacios de nombres. Los ensamblados contienen más de un espacio de nombres. Por ejemplo:
System.dll
contiene estos espacios de nombres (y más):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
DLL
archivos son ensamblados que contienen espacios de nombres.GAC
es caché de ensamblados global . Según MSDN:Por lo tanto, los ensamblados de uso común se almacenan en el
GAC
y, 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 elGAC
son ensamblados con nombre seguro. Normalmente, cuando agrega una referencia a un El ensamblaje de su proyecto que no esStrong-Named
una copia de su.dll
archivo se creará en subin\Debug
carpeta. 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 Nombrefuente
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.fuente
El archivo que ve en GAC es
System.Data.dll
que es un ensamblado y contiene espacios de nombres, incluidosSystem.Data
. Si ve las propiedades de referencia en Visual Studio, verá: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.
fuente
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.
fuente
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
fuente