Está en la página 1de 36

.

NET Framework

David Gan Jimnez

P08/B0036/01625
FUOC P08/B0036/01625 .NET Framework
ndice

Introduccin.......................................................................................... 5

Objetivos................................................................................................. 6

1. El .NET Framework....................................................................... 7
1.1. Ventajas principales del .NET Framework ................................ 8
1.2. Versiones de NET ...................................................................... 10

2. Common Language Runtime (CLR).......................................... 12
2.1. Funciones del CLR .................................................................... 12
2.2. Proceso de ejecucin de una aplicacin .NET .......................... 14
2.2.1. Compilacin .................................................................. 14
2.2.2. Enlazado ......................................................................... 15
2.2.3. Creacin de un dominio de aplicacin ......................... 15
2.2.4. Cargador de clases ......................................................... 16
2.2.5. Compilacin JIT ............................................................. 16
2.2.6. Ejecucin CLR ................................................................ 18

3. Common type system (CTS).......................................................... 19
3.1. Elementos del CTS .................................................................... 19
3.2. Tipos valor frente a Tipos referencia ........................................ 19
3.3. Tipos de miembros .................................................................... 20
3.4. Visibilidad .................................................................................. 20
3.5. CLS Common language specification........................................... 21

4. Framework Class Library (FCL)................................................. 22
4.1. Funcionalidades principales de la FCL ..................................... 23
4.2. Otros namespaces de la FCL ...................................................... 24

5. Ensamblados.................................................................................... 25
5.1. Caractersticas de los ensamblados ........................................... 25
5.2. Tipos de ensamblados ............................................................... 26
5.3. Estructura de un ensamblado ................................................... 26
5.3.1. Visualizacin del contenido de un archivo PE .............. 28
5.3.2. Internacionalizacin ...................................................... 29
5.4. Global assembly cache .............................................................. 30
5.4.1. Strong name...................................................................... 31
5.4.2. Instalacin en la GAC ................................................... 32
5.4.3. Versionado ..................................................................... 32
5.4.4. Ejecucin 'side-by-side' .................................................... 33

FUOC P08/B0036/01625 .NET Framework
Bibliografa............................................................................................ 35
FUOC P08/B0036/01625 5 .NET Framework
Introduccin
El .NET Framework es el componente principal de Microsoft .NET. Constituye
la plataforma de desarrollo de las aplicaciones .NET e incluye las herramien-
tas y componentes necesarios para desarrollar diferentes tipos de aplicaciones
(Windows, web, para dispositivos mviles, etc.). El resto de herramientas y
tecnologas .NET se basan en dicha plataforma.
En este tema, veremos los conceptos bsicos del .NET Framework, necesarios
para entender el proceso de creacin y ejecucin de aplicaciones .NET.
FUOC P08/B0036/01625 6 .NET Framework
Objetivos
El material que se os presenta a continuacin ha sido elaborado teniendo en
cuenta los siguientes objetivos especficos:
1. Conocer en profundidad del .NET Framework: caractersticas, ventajas y
componentes principales del .NET Framework.
2. Conocer el proceso de compilacin y ejecucin de aplicaciones .NET.
3. Saber el concepto de ensamblado y sus caractersticas principales.
4. Ser capaces de escribir los componentes principales de la plataforma.
FUOC P08/B0036/01625 7 .NET Framework
1. El .NET Framework
El .NET Framework es el conjunto de componentes y herramientas que per-
miten la ejecucin de aplicaciones .NET. Para desarrollar aplicaciones .NET se
utilizan las herramientas del .NET Framework SDK. Dentro del .NET Frame-
work podemos distinguir las tres partes principales siguientes:
CLR (common language runtime). Permite la ejecucin de aplicaciones .NET
dentro de un entorno gestionado. Gracias al CLR, las aplicaciones .NET se
pueden instalar y desinstalar ms fcilmente, con una mejor gestin de
versiones, y control de seguridad. Adems, dado que todos los lenguajes
comparten el CLR, el desarrollo, la depuracin y la ejecucin de aplicacio-
nes puede realizarse, aunque la aplicacin est desarrollada en diferentes
lenguajes de programacin.
CLS (common language specification) y lenguajes .NET. CLS es una especifi-
cacin de las caractersticas de los lenguajes de programacin compatibles
con el .NET Framework. Esta especificacin es precisamente la que permite
que se puedan implementar nuevos lenguajes de programacin adaptados
a la plataforma.
El .NET Framework incluye cinco lenguajes de programacin: Visual Basic
.NET, Visual C++ .NET, C#, J# y JScript. No obstante, permite que otros len-
guajes desarrollados por terceros puedan acoplarse fcilmente a la plata-
forma, y ya existe una gran variedad de ellos, entre los cuales podemos en-
contrar versiones de COBOL, FORTRAN, Ada, Pascal, Haskell, Eiffel, Delp-
hi, etc.
FCL (framework class library). La biblioteca de clases comunes est com-
puesta por una serie de clases con las herramientas y utilidades bsicas
necesarias para empezar a desarrollar aplicaciones, todas ellas disponibles
para todos los lenguajes .NET gracias al CLS. Dentro de la FCL, podemos
destacar algunas de las libreras ms importantes, como las funcionalida-
des bsicas del sistema operativo (Base Class Library BCL), adems de otras
tecnologas como ASP.NET, WinForms para creacin de interfaces graficas,
ADO.NET para acceso a datos, etc.
FUOC P08/B0036/01625 8 .NET Framework
Estructura del .NET Framework
1.1. Ventajas principales del .NET Framework
El hecho de que .NET Framework est desarrollado sobre estndares confiere
una gran ventaja a esta plataforma. Tanto el componente principal del .NET
Framework (CLR), como la especificacin de los lenguajes .NET (CLS) y el len-
guaje C#, han sido estandarizados por ECMA (European Computer Manufac-
turers Association). Por otro lado, muchas de las tecnologas que utiliza el .NET
Framework son estndares, como XML, SOAP, UDDI, WDSL, etc.
La utilizacin de estndares favorece otras ventajas del .NET Framework como
son la integracin de aplicaciones o la interoperabilidad entre lenguajes. A
continuacin, repasamos las ventajas ms importantes:
Integracin de componentes y aplicaciones. Los servicios web proporcio-
nan una arquitectura gil del sistema, tanto interna como externamente,
simplificando la integracin de aplicaciones o componentes por medio de
intranets o de Internet.
Adems, permiten la integracin de aplicaciones ya existentes de forma
sencilla y sin necesidad de grandes modificaciones, con independencia de
la plataforma y lenguaje utilizado para desarrollar la aplicacin. Esto es
posible gracias a que los servicios web estn basados en el estndar XML.
Interoperabilidad entre lenguajes. El .NET Framework proporciona un en-
torno comn de desarrollo y ejecucin para todos los lenguajes .NET. To-
dos los lenguajes .NET permiten desarrollar aplicaciones Windows, Web
Services, pginas ASP.NET o aplicaciones para dispositivos mviles.
Todos los lenguajes .NET comparten la librera de clases (FCL), el sistema
de depuracin
1
, el sistema de excepciones, la gestin automtica de me-
moria, etc. De hecho, se pueden utilizar diferentes lenguajes .NET para
desarrollar partes distintas de una misma aplicacin. Esto facilita que los
programadores puedan escoger el lenguaje de programacin en funcin
de sus preferencias y no de la potencia del lenguaje, ya que todos ellos
tienen acceso a las mismas funcionalidades.
(1)
La depuracin, la gestin de ex-
cepciones y la gestin de memoria
son tareas del CLR, como veremos
ms adelante. Tanto la FCL como
el CLR son comunes para todos los
lenguajes .NET.
FUOC P08/B0036/01625 9 .NET Framework
El .NET Framework incluye cuatro lenguajes de programacin desarrolla-
dos por Microsoft: C#, Visual Basic .NET, C++.NET y J#. Aparte de estos
lenguajes, existen otros lenguajes .NET desarrollados por otras compaas
o grupos de entusiastas. La creacin de lenguajes .NET por grupos o em-
presas ajenas a Microsoft es posible gracias a que la especificacin de los
lenguajes .NET es un estndar.
Facilita el desarrollo. El .NET Framewok est diseado enteramente bajo el
paradigma de la orientacin a objetos. Esto facilita el desarrollo de nuevos
componentes, y el uso de los componentes disponibles en la librera de
clases.
La librera de clases de .NET Framework incluye multitud de componen-
tes que encapsulan tareas comunes, como el acceso a bases de datos, la
creacin y gestin de formularios de usuario, la creacin y control de th-
reads
2
de ejecucin, etc.
Adems, algunas de las tareas necesarias en COM como la gestin de me-
moria o el control de punteros, que son fuente de muchos de los proble-
mas de falta de memoria o de accesos incorrectos, han sido eliminados,
gracias a la implementacin de un gestor automtico de memoria, y al
uso de referencias en vez de punteros
3
.
(2)
Los threads o hilos de ejecucin
son subprogramas que se ejecu-
tan dentro de un mismo proceso
simultneamente, compartiendo
sus recursos
(3)
Tanto los punteros como las re-
ferencias contienen direcciones
de memoria. La diferencia funda-
mental es que mediante un punte-
ro se puede consultar la direccin
de memoria que almacena, mien-
tras que con una referencia slo se
puede acceder al valor que se al-
macena en la direccin de memo-
ria que indica la referencia.
Simplifica la instalacin. Los componentes .NET no necesitan aadir in-
formacin en el registro del sistema para funcionar, ni es necesario definir
interfaces MIDL
4
para su utilizacin, ya que son autodescriptivos. Esto im-
plica que los componentes .NET se pueden instalar simplemente copian-
do los ensamblados correspondientes en la carpeta deseada de la mquina
destino. El nico requisito es que el motor de ejecucin del .NET Frame-
work est instalado.
Por otro lado, es posible tener ms de una versin de un mismo compo-
nente coexistiendo en el mismo ordenador, de forma que si una deter-
minada aplicacin necesita una versin anterior a otra ms moderna, re-
cientemente instalada, puede seguir funcionando sin problemas. De esta
forma, se soluciona el problema del llamado DLL
5
Hell de los componen-
tes COM, en que al instalar una nueva versin de una dll se sobrescriba la
anterior, de forma que si una aplicacin requera la versin antigua, sta
poda dejar de funcionar, por ejemplo porque una de las funciones que
utilizaba de la dll antigua ya no estaba disponible o tena un comporta-
miento diferente en la nueva.
Seguridad. El .NET Framework permite definir los permisos otorgados a
un programa para realizar unas u otras acciones. Por ejemplo, se puede
(4)
MIDL (Microsoft interface defini-
tion language) es el lenguaje utili-
zado para describir los componen-
tes COM y sus funcionalidades, pa-
ra que puedan ser utilizados por
otras aplicaciones.
(5)
DLL (dynamic link library). Fiche-
ros binarios que contienen un con-
junto de funcionalidades comunes
que forman parte de una aplica-
cin. Las dll se pueden compartir
entre aplicaciones, favoreciendo as
la reutilizacin de componentes.
Las libreras .NET tambin tienen
extensin .dll, pero el formato del
fichero es totalmente distinto.
FUOC P08/B0036/01625 10 .NET Framework
permitir a un programa que lea de un fichero pero que no pueda escribir
sobre l.
1.2. Versiones de NET
Desde la aparicin de la primera versin estable de .NET en 2002, Microsoft
ha continuado aadiendo funcionalidades a la plataforma y mejorando sus
herramientas de desarrollo.
A continuacin, veremos las diferentes versiones de .NET existentes. Todas
ellas pueden coexistir en un mismo sistema operativo, de forma que se pue-
den ejecutar aplicaciones realizadas en una u otra versin sin problemas de
compatibilidad, y estn disponibles como descarga independiente y gratuita
en el sitio de descargas de Microsoft:
.NET Framework 1.0. La primera versin del .NET Framework apareci en
2002, aunque ya existan algunas betas desde finales de 2000. Junto con
esta versin del .NET Framework aparece tambin Visual Studio .NET 2002,
la nueva versin del entorno de desarrollo de Microsoft, despus de la ver-
sin 6.0 para tecnologas anteriores a .NET.
.NET Framework 1.1. La versin 1.1 aparece en 2003 junto con la nueva
versin de la herramienta de desarrollo Visual Studio .NET 2003 y el sis-
tema operativo Windows Server 2003. Este sistema operativo incluye el
.NET Framework como componente instalable.
En esta versin, se mantiene el mismo motor de ejecucin que en la an-
terior, aunque incluye bastantes mejoras respecto de la versin 1.0, entre
otras incluye una versin del .NET Framework para dispositivos mviles
conocido como .NET Compact Framework. Tambin se incluyen herra-
mientas para interoperar con la suite ofimtica Office 2003, que tambin
aparece este mismo ao.
.NET Framework 2.0. Esta nueva versin del .NET aparece en 2005, junto
con Visual Studio 2005 (la palabra .NET desaparece del nombre del pro-
ducto) y SQL Server 2005 (la nueva versin del motor de bases de datos de
Microsoft, despus de 5 aos). Tambin se crea una nueva revisin del sis-
tema operativo Windows Server 2003 R2, que incluye esta nueva versin
del .NET Framework en vez de la versin 1.1.
Esta versin incluye cambios sustanciales tanto en el CLR como en los len-
guajes .NET, como son los tipos genricos o los tipos abstractos. Tambin
aparece una segunda versin del .NET Compact Framework para disposi-
tivos mviles. Otra de las mejoras importantes consiste en la integracin
del CLR dentro del motor de bases de datos SQL Server 2005, de forma que
es posible crear elementos de programacin de la base de datos, utilizando
lenguajes y tecnologas .NET.
FUOC P08/B0036/01625 11 .NET Framework
.NET Framework 3.0. Junto con la aparicin de Windows Vista en 2006,
aparece tambin la nueva versin del .NET Framework, incluida como
componente de dicho sistema operativo. A pesar de que es un cambio de
versin importante (de la 2 a la 3), la versin 3.0 mantiene el mismo motor
de ejecucin y libreras que la versin 2.0. La gran novedad en esta versin
son las cuatro nuevas tecnologas que incorpora a las ya existentes en el
.NET 2.0, son las siguientes:
Windows presentation foundation (WPF).Proporciona un conjunto de
funcionalidades para desarrollar interfaces grficas independientes de
la plataforma, que utilicen todo tipo de elementos grficos avanzados
como dibujo vectorial, grficos en 3-D, vdeo, audio, etc.
Windows communication foundation (WCF). Ofrece un conjunto de fun-
cionalidades que facilitan la creacin de aplicaciones SOA orientadas
a servicio (Service Oriented Architecture).
Windows workflow foundation (WWF). Incluye funcionalidades y herra-
mientas para crear flujos de trabajo que se pueden ejecutar desde una
aplicacin.
Windows cardspace (WCS). Permite almacenar de forma segura la iden-
tidad digital de una persona y proporciona una interfaz unificada para
escoger la identidad para una transaccin particular como por ejemplo
autenticarse en un website.
Estructura del .NET Framework 3.0
.NET Framework 3.5. La siguiente versin del .NET Framework est previs-
ta para finales de 2007, principios de 2008, junto a la aparicin de Visual
Studio 2008, SQL Server 2008 y Windows Server 2008, que incluir esta
versin como componente del sistema operativo. Tambin aparecer por
entonces la correspondiente versin del Framework para dispositivos m-
viles (.NET Compact Framework 3.5).
En esta versin del Framework s que se incluye una nueva versin del mo-
tor de ejecucin de .NET, para ofrecer las funcionalidades necesarias para
algunas de las caractersticas que se incluyen en ella, como por ejemplo
LINQ o lambda expressions.
FUOC P08/B0036/01625 12 .NET Framework
2. Common Language Runtime (CLR)
El componente principal del .NET Framework es el CLR
6
(common language
runtime), que como su nombre indica, es el motor de ejecucin de las aplica-
ciones .NET, es decir, que sin CLR las aplicaciones .NET no se podran ejecutar.
En este apartado, estudiaremos las funciones que realiza el CLR, y cul es el
proceso de ejecucin de una aplicacin .NET.
2.1. Funciones del CLR
La principal funcin del CLR es la de ejecutar aplicaciones .NET dentro de un
entorno gestionado
7
. El proceso de ejecucin de aplicaciones .NET se explica
ms adelante dentro de este mismo captulo. Otras funcionalidades del CLR,
relacionadas con la ejecucin de aplicaciones, son las siguientes:
Verificacin de cdigo. El CLR comprueba que el cdigo sea correcto, es
decir, que no realice operaciones inseguras, como accesos ilegales a me-
moria o llamadas incorrectas a mtodos.
Seguridad. Durante la ejecucin de una aplicacin .NET, el CLR comprueba
que las acciones que realiza una aplicacin estn permitidas por la poltica
de seguridad establecida. En caso contrario se lanza una excepcin y se
termina la ejecucin de la aplicacin.
Gestin automtica de memoria. El CLR gestiona automticamente la me-
moria utilizada por las aplicaciones .NET. Cuando una porcin de memo-
ria deja de ser utilizada por la aplicacin, uno de los componentes del CLR,
llamado garbage collector (recolector de basura), libera automticamente
esa zona de memoria para que vuelva a estar disponible de nuevo.
Control de excepciones y depuracin. El control de excepciones (errores) y
los mecanismos de depuracin, son controlados por el CLR. De este modo,
es posible realizar la depuracin de una aplicacin multilenguaje, o lanzar
excepciones entre tipos creados en lenguajes distintos.
Gestin de versiones. Cada componente o aplicacin .NET tiene asociado
un nmero de versin, que permite al CLR determinar los componentes
necesarios que son compatibles con la versin de la aplicacin a ejecutar.
Si no se encuentra ninguna versin compatible de alguno de los compo-
nentes necesarios, se produce un error de compatibilidad. Por otro lado,
es posible tener ms de una versin del mismo componente instalado en
el sistema, de forma que si se instala una versin nueva de un componen-
(6)
Existe una especificacin
ECMA del CLR, llamada CLI
(Common Language Infrastruc-
ture), disponible en <http://
msdn.microsoft.com/ca-es/netfra-
mework/default(en-us).aspx>.
Por otro lado, existe una imple-
mentacin libre del CLI desarrolla-
da por Microsoft, llamada SSCLI
(Share source CLI) y disponible en
<http://code.msdn.microsoft.com/
ssclimsbuild>.
(7)
Un entorno gestionado es un
contexto de ejecucin de aplica-
ciones que gestiona los recursos, la
memoria, asegura la ejecucin de
cdigo seguro, etc.
FUOC P08/B0036/01625 13 .NET Framework
te, las aplicaciones que utilizan la versin antigua siguen funcionando co-
rrectamente.
Instalacin simplificada. El CLR no necesita guardar ninguna informacin
de los componentes .NET en el registro del sistema para su ejecucin. Esto
evita los problemas de integridad del registro que pueden provocar que
una aplicacin deje de funcionar.
El hecho de que no se necesite ninguna informacin adicional para ejecu-
tar una aplicacin, aparte de los ficheros de la propia aplicacin, hace que
el impacto de instalacin sea cero, y que sea mucho ms sencillo instalar
aplicaciones; simplemente, basta con copiar los ficheros del lugar de ins-
talacin al directorio destino.
Interoperabilidad con cdigo no gestionado. Aparte de ejecutar aplicacio-
nes gestionadas, el CLR permite interactuar con cdigo no gestionado
8
.
Todo el cdigo que no es ejecutable por el CLR se denomina unmanaged co-
de (cdigo no gestionado o no administrado). Por ejemplo, todas las apli-
caciones de win32 o COM son unmanaged code.
.NET ofrece una serie de ventajas sobre el cdigo no administrado, pero
a veces no es posible traducir todas las aplicaciones de una empresa a la
nueva plataforma por el coste que ello supondra. Por eso, el CLR ofrece
mecanismos de interoperabilidad con cdigo no administrado, de forma
que se puedan desarrollar nuevas funcionalidades en .NET aprovechando
lo anterior, y sin problemas de interaccin. Concretamente el CLR sopor-
ta:
(8)
Se conoce como cdigo gestio-
nado el cdigo que administra o
gestiona el CLR, es decir, el cdi-
go generado por lenguajes .NET.
El cdigo no gestionado, por lo
tanto, es aquel cdigo que no es
.NET, y que no se ejecuta dentro
del CLR.
Cdigo gestionado que utiliza funciones no gestionadas desde una .dll. El
mecanismo de P/Invoke
9
permite realizar llamadas a funciones que se en-
cuentran en libreras dinmicas o dll del sistema o de aplicaciones win32.
Cdigo gestionado que utiliza componentes COM. El .NET Framework
incorpora la herramienta TlbImp.exe, que permite crear un componente
.NET que describe el objeto COM y que permite comunicarse con l.
Utilizacin de un componente COM desde un objeto .NET
Cdigo no gestionado que utiliza un tipo gestionado. Mediante las herra-
mientas Tlbexp.exe y Regasm.exe, incluidas en el .NET Framework, es po-
sible crear un objeto COM que describa y se comunique con el tipo ges-
tionado, y registrarlo en el sistema de forma que otras aplicaciones COM
puedan utilizarlo.
(9)
P/Invoke: Plattform Invoke
FUOC P08/B0036/01625 14 .NET Framework
Utilizacin de un objeto .NET desde un componente COM
2.2. Proceso de ejecucin de una aplicacin .NET
Desde que se escribe el cdigo fuente de una aplicacin en un determinado
lenguaje de programacin .NET, hasta que la aplicacin se ejecuta en el CLR,
existe una serie de pasos o transformaciones. El siguiente grfico resume estos
pasos, que estudiaremos a continuacin:
Proceso de compilacin y ejecucin de una aplicacin .NET
Los rectngulos amarillos representan los diferentes estados por los que pasa
el cdigo, mientras que los verdes representan las etapas por las que pasa el
cdigo hasta ser ejecutado. El recuadro azul delimita las etapas que lleva a cabo
el CLR.
2.2.1. Compilacin
Los programas o componentes .NET se escriben en ficheros de cdigo fuente,
generalmente ficheros de texto con una u otra extensin en funcin del len-
guaje de programacin utilizado.
El proceso de compilacin consiste en traducir el cdigo fuente a cdigo IL,
tambin llamado MSIL (intermediate language o Microsoft intermediate langua-
ge), un lenguaje intermedio parecido al cdigo mquina, pero que no puede ser
ejecutado directamente por el procesador (es independiente del procesador).
FUOC P08/B0036/01625 15 .NET Framework
Todos los lenguajes de .NET compilan a un cdigo intermedio comn deno-
minado MSIL (MicroSoft intermediate language) o simplemente IL (intermediate
language). De esta forma, los componentes se ejecutan igual en el CLR inde-
pendientemente del lenguaje y de la plataforma en los que fueron creados.
La tarea de compilacin se lleva a cabo mediante una aplicacin llamada com-
pilador. Cada compilador permite compilar cdigo fuente escrito en un len-
guaje de programacin concreto. Todos los compiladores de lenguajes .NET
traducen el cdigo fuente a IL.
El cdigo IL generado por los compiladores se almacena en un fichero llamado
PE (portable executable), que contiene el cdigo IL junto con sus metadatos.
Los metadatos son la descripcin de los tipos de datos definidos en el cdigo
IL, sus mtodos, sus atributos, etc. Los metadatos son necesarios para ejecutar
aplicaciones, para verificar que el cdigo IL que se ejecuta es correcto y evitar
operaciones invlidas. Veremos la estructura de los ficheros PE en el apartado
de ensamblados, ms adelante en este mismo captulo.
2.2.2. Enlazado
Para que el CLR pueda ejecutar una aplicacin, es necesario agrupar todos los
archivos PE generados en una estructura lgica llamada ensamblado
10
. Este
paso se denomina enlazado (link), y por lo general se realiza conjuntamente
con el proceso de compilacin.
Un ensamblado puede estar formado por uno o ms ficheros PE como ya ve-
remos ms adelante, aunque generalmente los ensamblados estn formados
por un nico fichero PE con extensin .dll o .exe.
Los ensamblados contienen, adems de los ficheros PE, un conjunto de infor-
macin acerca del propio ensamblado (versin, referencias externas, etc.), que
se denomina manifest. Hablaremos con ms detalle de los ensamblados ms
adelante en otro apartado.
2.2.3. Creacin de un dominio de aplicacin
Todas las aplicaciones .NET se ejecutan dentro de un dominio de aplicacin
(application domain), una estructura del CLR que es la unidad de aislamiento
de la aplicacin, garantizando que sta no puede acceder directamente a los
recursos o al cdigo de otras aplicaciones, y que un fallo en una aplicacin
no afecta a las dems.
El concepto de application domain es similar al de un proceso del sistema ope-
rativo; la diferencia est en que un dominio de aplicacin requiere menos re-
cursos que un proceso del sistema. De hecho, un proceso puede alojar ms de
un dominio de aplicacin.
(10)
Aunque la extensin de los en-
samblados coincide con la de las li-
breras dinmicas (.dll) o los archi-
vos ejecutables de Windows (.exe),
el contenido de estos ficheros slo
se puede ejecutar mediante el CLR.
FUOC P08/B0036/01625 16 .NET Framework
Al ejecutarse una aplicacin .NET, existe una aplicacin llamada CLR Host,
que se encarga de iniciar un proceso con el CLR (si no est ya iniciado), y crear
uno o ms dominios de aplicacin en el proceso del CLR para poder ejecutar
la aplicacin. Ejemplos de aplicaciones CLR Host son ASP.NET, y el cargador
de aplicaciones .exe del shell de Windows.
2.2.4. Cargador de clases
Una vez creado el domino de la aplicacin, el cargador de clases del CLR se
encarga de buscar y cargar en memoria las clases necesarias para ejecutar la
aplicacin. Las clases necesarias se pueden encontrar en el propio ensamblado
de la aplicacin o en otros ensamblados referenciados por ste.
2.2.5. Compilacin JIT
Los procesadores actuales no son capaces de ejecutar las instrucciones IL di-
rectamente, aunque puede que esto sea posible en el futuro. Por ello, es nece-
sario un proceso de traduccin de cdigo IL al cdigo mquina del procesador
en el que se est ejecutando la aplicacin.
Antes de ejecutar un mtodo, el CLR detecta todos los tipos de datos referen-
ciados en su cdigo y guarda, en una estructura de datos interna, toda la in-
formacin sobre los mtodos de estos tipos y las direcciones donde se puede
encontrar su cdigo fuente.
La primera vez que un mtodo gestionado es invocado, el cdigo IL correspon-
diente es traducido a cdigo mquina por un compilador llamado JIT compi-
ler (just-in-time compiler). El cdigo mquina generado por el JIT compiler se
almacena en memoria, de forma que la prxima vez que se ejecuta ese mtodo
no es necesario volver a traducir su cdigo IL a nativo.
No obstante, el cdigo nativo generado se borra una vez termina la ejecucin
de la aplicacin, es decir, que la prxima vez que se ejecute se volver a traducir
el cdigo IL a nativo. Aunque esto pueda parecer una prdida de eficiencia
respecto a las aplicaciones nativas, el proceso de conversin de IL a cdigo
nativo est optimizado para cada tipo de procesador, por lo que en global el
rendimiento es similar. En todo caso, es posible precompilar una aplicacin
.NET para un procesador concreto con la aplicacin Ngen.exe incorporada
en el .NET Framework SDK si es necesario maximizar el rendimiento, pero
entonces perderemos la compatibilidad con otras plataformas.
Durante el proceso de JIT, aparte de traducir el cdigo a nativo, se verifica el
cdigo para asegurar que no realiza operaciones de acceso a memoria inco-
rrectas, que los mtodos se llaman con el nmero de parmetros correctos,
FUOC P08/B0036/01625 17 .NET Framework
que los tipos de los parmetros y del retorno coinciden, etc. Para realizar estas
comprobaciones, el CLR utiliza la informacin sobre los tipos de datos alma-
cenados en los metadatos del ensamblado.
Si se determina que el cdigo IL no es seguro, se lanza una excepcin y el
mtodo no se ejecuta. Los compiladores de C#, Visual Basic .NET y J# producen
siempre cdigo IL seguro.
Los tipos de compilador JIT son los siguientes:
Normal. El cdigo nativo generado a partir del cdigo MSIL est optimi-
zado para aprovechar al mximo las prestaciones de la mquina en la que
se ejecuta la aplicacin. Es un proceso ms lento, pero el cdigo generado
es ms eficiente y rpido.
Econo. No optimiza el cdigo nativo; simplemente traduce el cdigo MSIL
a nativo. Es ms rpido, pero el cdigo resultante es ms lento.
Pre-JIT. El cdigo MSIL se traduce enteramente a cdigo nativo y se alma-
cena para prximos usos.
Las caractersticas de la compilacin JIT son las siguientes:
Independencia de la plataforma. El cdigo MSIL es comn para todas las
plataformas. Es en el proceso de compilacin JIT cuando se transforman
en cdigo nativo, por eso no es necesario compilar una versin diferente
de la aplicacin para cada plataforma.
Interoperabilidad entre lenguajes. Todos los compiladores de lenguajes
.NET generan cdigo MSIL, que es posteriormente compilado por el JIT-
compiler, independientemente del lenguaje original en el que fue desarro-
llada la aplicacin. Es ms, diferentes ensamblados pueden proceder de
cdigo fuente escrito en lenguajes diferentes.
Compilacin bajo demanda. El cdigo MSIL se va traduciendo a cdigo
nativo a medida que se va necesitando, es decir, a medida que el progra-
ma se va ejecutando se compilan los mtodos solicitados que no han si-
do compilados previamente. El cdigo nativo generado se guarda para su
posterior uso. Esto evita que se compilen partes del cdigo MSIL que qui-
zs no se usen casi nunca hasta que no sea necesario.
FUOC P08/B0036/01625 18 .NET Framework
2.2.6. Ejecucin CLR
El cdigo generado por el compilador JIT se denomina cdigo nativo gestio-
nado, porque se ejecuta dentro del entorno del CLR, es decir, el CLR gestiona
la ejecucin de ese cdigo de forma que no se puedan producir referencias in-
vlidas, controla la memoria, comprueba la seguridad, etc. Este cdigo s que
es ejecutable directamente por el procesador.
FUOC P08/B0036/01625 19 .NET Framework
3. Common type system (CTS)
El CTS o sistema comn de tipos, define las reglas que debe cumplir la defini-
cin de un tipo para que pueda ser gestionado por el CLR. El CTS permite la
interoperabilidad de tipos entre distintos lenguajes .NET, ya que todos ellos
deben seguir las normas establecidas en el CTS. Entre otras ventajas del CTS
conviene destacar las siguientes:
Facilita la reutilizacin de cdigo
Provee a los lenguajes .NET de un modelo de objetos uniforme (misma
forma de gestionar los eventos, excepciones, etc.)
Proporciona un modelo de ejecucin comn
3.1. Elementos del CTS
Los elementos del CTS son los siguientes:
Un modelo de objetos comn (.NET framework)
Implementacin comn de los tipos de datos bsicos (FCL)
Una especificacin comn para asegurar la compatibilidad entre lenguajes
(CLS)
3.2. Tipos valor frente a Tipos referencia
Todos los tipos .NET heredan directa o indirectamente del tipo predefinido
System.Object, independientemente del lenguaje de programacin utilizado.
El CTS divide los tipos de datos en las dos categoras siguientes:
Tipos valor. Son los tipos primitivos del lenguaje: enteros, reales, caracte-
res, etc. Los tipos valor de .NET, a diferencia de otros lenguajes orientados
a objeto, son tambin objetos, y por lo tanto se pueden utilizar en los mis-
mos contextos en los que se utilizan el resto de tipos.
Tipos referencia. Los tipos referencia representan objetos ms complejos,
con una serie de propiedades y de funcionalidades.
La diferencia fundamental entre los tipos valor y referencia es que los tipos
valor se almacenan en la pila de ejecucin del programa, mientras que los
tipos referencia se almacenan en una zona especial de memoria denomi-
nada heap. En la pila de ejecucin, se aade una referencia (direccin de
memoria) que indica la localizacin de los datos del tipo en el heap.
FUOC P08/B0036/01625 20 .NET Framework
3.3. Tipos de miembros
Todos los tipos tienen a su vez un conjunto de 0 o ms miembros o elementos
que definen el estado y el comportamiento del tipo. Los diferentes tipos de
miembro definidos por el CTS son los siguientes:
Campo (field). Una variable que forma parte del estado del objeto. Se iden-
tifican por su nombre y su tipo.
Mtodo. Una funcin o accin que ejecuta una operacin o cambio sobre
el estado del objeto.
Propiedad. Una propiedad es un mtodo doble (lectura/escritura) de un
campo del tipo. Las propiedades se pueden utilizar como un campo pbli-
co, aunque realmente estn formadas por uno o dos mtodos de acceso.
Evento. Un evento es un mecanismo de notificacin entre objetos. Los
objetos interesados se registran en el evento, y cuando sucede un cambio
en el estado del objeto relacionado con el evento se les notifica.
3.4. Visibilidad
La visibilidad define, para cada elemento o miembro de un tipo, quin puede
acceder a su informacin:
Privado. El miembro slo es accesible desde el propio tipo.
Familiar. El miembro slo es accesible desde el propio tipo o desde cual-
quier tipo derivado.
Ensamblado. El miembro es accesible desde cualquier tipo que se encuen-
tre dentro del mismo ensamblado.
Pblico. El miembro es accesible desde cualquier otro tipo.
Las palabras clave para definir el tipo de visibilidad de un miembro depen-
den del lenguaje de programacin. En C# estas palabras son respectivamente:
private, protected, internal y public.
Aparte de los tipos de visibilidad anteriores, tambin existen los dos siguien-
tes, menos frecuentes y no disponibles en todos los lenguajes, aunque si so-
portados por el CTS:
FUOC P08/B0036/01625 21 .NET Framework
Familiar y ensamblado. El miembro es accesible por tipos derivados que
estn en el mismo ensamblado. En C# no existe este tipo de visibilidad.
Familiar o ensamblado. El miembro es accesible por tipos derivados y por
los tipos que estn en el mismo ensamblado. En C# se define como pro-
tected internal.
3.5. CLS Common language specification
Los lenguajes de programacin tienen muchas diferencias entre s. Si se quiere
que todos los tipos de datos que se creen con un lenguaje sean compatibles
con otros lenguajes .NET, es necesario utilizar slo aquellas caractersticas que
estn disponibles en otros lenguajes. Para ello, Microsoft ha definido la Com-
mon language specification (CLS), que determina el conjunto mnimo de carac-
tersticas que tienen que soportar los compiladores para poder emitir cdigo
IL que funcione sobre el CLR y que sea compatible con otros lenguajes.
El CLR/CTS soporta muchas ms funcionalidades de las que se definen en el
CLS, por lo que, si la interoperabilidad entre lenguajes no es importante, se
pueden utilizar estas caractersticas para crear tipos ms complejos, aunque no
estarn disponibles desde otros lenguajes.
Los lenguajes de programacin como C#, Visual Basic .NET, o cualquier otro
lenguaje .NET, implementan todas las caractersticas descritas en el CLS, aparte
de otras caractersticas disponibles en el CLR/CTS, es decir, que cada lenguaje
implementa un superconjunto del CLS, y un subconjunto diferente, (aunque
posiblemente no disjunto), del CLR/CTS. El siguiente grfico ilustra lo ante-
rior:
Esquema de compatibilidad entre lenguajes
FUOC P08/B0036/01625 22 .NET Framework
4. Framework Class Library (FCL)
La librera de tipos comunes (FCL, framework class library) es el conjunto de
clases y otros componentes que incorpora el .NET Framework. Su principal
caracterstica es que es independiente del lenguaje de programacin utilizado,
es decir, estn disponibles para todos los lenguajes .NET. La FCL incluye los
tipos bsicos necesarios para desarrollar cualquier tipo de aplicacin en .NET;
entre otros, los siguientes:
Servicios web
Formularios Windows (WinForms)
Formularios web (ASP.NET)
Aplicaciones de consola
Servicios de Windows
Libreras de componentes
La FCL est diseada completamente bajo el concepto de orientacin a obje-
tos, por lo que es mucho ms sencilla de utilizar y de comprender que otras
APIs de programacin anteriores como COM
11
, ATL
12
o MFC
13
.
La FCL est organizada como una estructura de directorios, para organizar los
tipos por funcionalidades. Los directorios se denominan namespaces (espacios
de nombres), y pueden a su vez contener tipos u otros namespaces.
Cada namespace se identifica por un nombre descriptivo de la funcionalidad
de los tipos que contiene. Dentro de un namespace cada elemento (tipo o na-
mespace) debe tener un nombre nico.
No obstante, pueden existir elementos con el mismo nombre si se hallan en
namespaces distintos. Por ello, para identificar y diferenciar elementos con el
mismo nombre, se utiliza toda la ruta de acceso al elemento.
La ruta completa de acceso a un elemento es una lista de los nombres de names-
paces en los que est contenido el elemento, separada por puntos. Por ejemplo,
el elemento C contenido en el namespace B que, a su vez, est contenido en el
elemento A, se identifica unvocamente como indica la siguiente expresin:
A.B.C
El namespace principal del .NET Framework es 'System', donde se en-
cuentran clases bsicas como Object, Console o los tipos pri-
mitivos. El namespace System contiene a su vez otros namespa-
(11)
COM (Component Object Mo-
del).
(12)
ATL (Active Template Library).
(13)
MFC (Microsoft Foundation
Class Library).
FUOC P08/B0036/01625 23 .NET Framework
ces como System.Windows, System.Web, System.WebServices,
System.Security, o System.Data, que a su vez contienen nuevos tipos
y otros namespaces.
4.1. Funcionalidades principales de la FCL
Dentro de las muchas funcionalidades existentes en la FCL, podemos destacar
algunas de las tecnologas ms importantes de .NET, que son las siguientes:
Acceso a las funciones del sistema operativo. La FCL contiene clases y m-
todos que permiten acceder a las diferentes funcionalidades del sistema
operativo, entre ellas las siguientes:
Gestin del sistema de ficheros (System.IO)
Gestin de seguridad (System.Security)
Comunicaciones de red (System.Net)
Threads y procesos (System.Threading)
ASP.NET (System.Web). ASP.NET es la nueva versin de pginas web di-
nmicas de Microsoft. Es un nuevo entorno, desarrollado desde cero (no
est basado en ASP
14
, la versin anterior) que se ejecuta en Internet Infor-
mation Services (IIS) y simplifica a los programadores la escritura de cdi-
go para construir pginas web basadas en HTML que se muestran en un
explorador.
ASP.NET caracteriza una forma nueva, independiente del lenguaje, de es-
cribir cdigo y ligarlo a peticiones de pginas web. Introduce los formula-
rios de web de .NET, que consiste en un modelo de programacin dirigido
por eventos para interactuar con controles que hace que la programacin
de una pgina web parezca muy similar a la programacin de un formu-
lario de Windows Forms.
ASP.NET contiene caractersticas importantes de seguridad y administra-
cin del estado de la sesin. Es ms robusto y contiene muchas mejoras
en su comportamiento respecto al ASP original.
WinForms (System.Windows.Forms) WinForms es el homlogo a los for-
mularios web de ASP.NET para las aplicaciones de Windows. Permite de-
sarrollar fcilmente interfaces grficas potentes, sin tener que escribir ms
cdigo de la cuenta. Visual Studio proporciona un diseador de formula-
rios, que permite desarrollar la interfaz grfica con WinForms de manera
visual.
ADO.NET (System.Data). ADO.NET es una versin mejorada y redisea-
da dentro de .NET de la librera de acceso a fuentes de datos ADO. Como
cosas ms interesantes, ADO.NET incorpora mejores funcionalidades para
trabajar con datos XML, y permite trabajar con fuentes de datos en modo
desconectado, es decir, sin necesidad de mantener abierta la conexin con
(14)
ASP (Active Server Pages) es
una tecnologa para desarrollar
pginas web dinmicas. El cliente
realiza una peticin al servidor, s-
te la procesa, y devuelve una pgi-
na HTML generada dinmicamen-
te en funcin de las peticiones del
usuario. ASP y ASP.NET se ejecu-
tan sobre IIS, el servidor de pgi-
nas web de Microsoft Windows
FUOC P08/B0036/01625 24 .NET Framework
la base de datos todo el rato, nicamente cuando es necesario. Esto hace
que mejore el rendimiento de las aplicaciones.
Enterprise Services (COM+) (System.EnterpriseServices). COM+, co-
nocido dentro de Microsoft .NET como Enterprise Services, es una versin
mejorada de COM que pretende solucionar alguno de los problemas que
presenta el antiguo COM. El .NET Framework proporciona acceso total
a los servicios COM+ mediante el mecanismo de interoperabilidad con
COM.
Adems, COM+ ofrece todo un conjunto nuevo de funcionalidades que
facilitan el desarrollo de aplicaciones empresariales como transacciones,
object pooling o queued components.
4.2. Otros namespaces de la FCL
A continuacin, se enumeran otros namespaces de la FCL:
System. Tipos de datos bsicos, generales.
System.Collections. Tipos de datos utilizados para almacenar otros
tipos de datos: listas, pilas, colas, tablas de hash, etc.
System.Diagnostics. Utilidades de depuracin de aplicaciones.
System.Drawing. Tipos para dibujo en 2D.
System.Globalization. Utilidades para facilitar la internacionaliza-
cin de aplicaciones.
System.Reflection. Utilidades para inspeccionar tipos en tiempo de
ejecucin.
System.Text. Utilidades para trabajar con texto en diferentes codifica-
ciones (ASCII, unicode, etc.)
System.Xml. Utilidades que permiten trabajar con documentos XML.
FUOC P08/B0036/01625 25 .NET Framework
5. Ensamblados
Un ensamblado (assembly en ingls), es la unidad mnima de organizacin de
las aplicaciones .NET, es decir, una aplicacin .NET se compone de uno o ms
ensamblados. Tal y como vimos en el proceso de ejecucin de una aplicacin
.NET, los ensamblados son el resultado de la compilacin y enlazado, y el pun-
to de entrada al CLR. En este apartado, estudiaremos a fondo las caractersticas
de los ensamblados y su utilizacin.
5.1. Caractersticas de los ensamblados
Las caractersticas de los ensamblados son las siguientes:
Definen una barrera de seguridad. El ensamblado es la unidad ms peque-
a sobre la que se pueden pedir y conceder permisos de seguridad.
Crean un marco de definicin de tipos. Cada tipo est identificado por el
ensamblado en el que se encuentra. De este modo, dos tipos con el mismo
nombre pero en ensamblados diferentes pueden ser diferenciados.
Son autodescriptivos. Un ensamblado contiene el cdigo IL necesario para
ejecutar los tipos incluidos en l, adems de la descripcin de su estruc-
tura (metadatos), informacin necesaria para acceder a ellos y utilizarlos
correctamente, y un conjunto de informacin adicional sobre el ensam-
blado, conocido como manifest.
Una de las mayores ventajas de esta caracterstica es que los ensamblados
y, por lo tanto, las aplicaciones .NET en general son independientes del
registro del sistema, ya que incorporan toda la informacin necesaria para
ser ejecutados, no necesitan aadir ninguna entrada al registro del sistema.
Son la unidad mnima de instalacin. Al instalar una aplicacin, sta in-
cluye todos los ensamblados que necesita para ser ejecutada. Si se elimina
la aplicacin, slo se eliminan los ensamblados correspondientes, por lo
que el resto de aplicaciones continan funcionando correctamente.
Son la unidad mnima de versionado. A todos los tipos incluidos dentro de
un ensamblado se les asigna la misma versin. En los metadatos se incluye
informacin sobre las dependencias entre versiones con otros ensambla-
dos.
Es posible mantener varias versiones de un mismo ensamblado en la mis-
ma mquina. A la hora de ejecutar una aplicacin que utilice ese ensam-
blado, se buscar y utilizar una versin del ensamblado que sea compa-
tible con ella.
FUOC P08/B0036/01625 26 .NET Framework
5.2. Tipos de ensamblados
Existen tres tipos de clasificaciones para los ensamblados:
Estticos o dinmicos. Un ensamblado esttico es un ensamblado alma-
cenado en uno o ms ficheros. Los ensamblados dinmicos, en cambio,
son ensamblados generados en tiempo de ejecucin y se almacenan en
memoria.
Para poder instalar y ejecutar una aplicacin en una mquina son necesa-
rios ensamblados estticos. Los ensamblados dinmicos se utilizan cuan-
do es necesario crear programas y ejecutarlos durante la ejecucin de una
aplicacin.
Fichero nico o mltiples ficheros. Como ya hemos visto en el proceso de
ejecucin de una aplicacin .NET, el cdigo IL de un programa se almacena
en un fichero PE (portable executable) tambin llamado modulo gestionado
(porque contiene cdigo gestionado, es decir cdigo IL). Existen tres tipos
de archivo PE: .netmodule, .DLL y .EXE. Por otro lado, el manifest de un
ensamblado se almacena siempre dentro de un fichero .EXE o .DLL.
En conclusin, un ensamblado puede estar formado por un nico fichero
.DLL o .EXE o por ms de un fichero .netmodule ms un fichero .DLL o
.EXE.
Ensamblados pblicos o privados. Un ensamblado privado es utilizado,
nicamente, por una aplicacin, y se almacena en el directorio en el que se
encuentra esa aplicacin. Los ensamblados pblicos o compartidos se ins-
talan en un directorio comn de ensamblados llamado Global Assembly
Cache o GAC, de forma que es accesible desde cualquier aplicacin .NET
instalada en la mquina.
5.3. Estructura de un ensamblado
En el proceso de ejecucin de una aplicacin .NET, comentamos que, aparte
del conjunto de ficheros PE, un ensamblado contiene una serie de informa-
cin adicional especfica, denominada manifest. Esta informacin puede estar
contenida junto con los metadatos de uno de los archivos PE del ensamblado,
o bien en un archivo PE aparte. Adems, un ensamblado puede contener una
serie de recursos como imgenes o iconos utilizados por la aplicacin. La in-
formacin contenida en el manifest es la siguiente:
Los datos identificadores del ensamblado son los siguientes:
Nombre del ensamblado
Nmero de versin
Lenguajes soportados
Procesadores y sistemas operativos soportados
Bibliografa
Ms informacin sobre el
manifest en: NET Framework
Developer's Guide, Assembly
Manifest.
FUOC P08/B0036/01625 27 .NET Framework
Informacin de strong name
Una tabla de ficheros que indica todos los ficheros que forman parte del
ensamblado, incluyendo ficheros .netmodule y recursos incluidos.
Informacin de los tipos contenidos en el ensamblado.
Una lista de dependencias externas a libreras dll u otros archivos externos
necesarios.
Un ensamblado est formado por un conjunto de ficheros. Por lo general, la
forma ms comn de ensamblado es la de un nico fichero PE con la infor-
macin del manifest incluida. Este es el tipo de ensamblados que se obtienen
cuando se crea un fichero PE de tipo .dll o .exe y no se aade ningn otro
archivo PE mediante la opcin /addmodule del compilador (Los ensamblados
que produce Visual Studio se componen siempre de un nico fichero).
Estructura de un ensamblado de un nico fichero
La opcin /addmodule permite crear ensamblados de mltiples ficheros PE de
tipo .netmodule. En este caso, el manifest estar en un archivo PE .dll o .exe
resultado de la compilacin, o en uno independiente. Los ensamblados de
mltiples ficheros son tiles, sobre todo, cuando se quiere incluir en un mismo
ensamblado mdulos que provienen de lenguajes de programacin distintos.
FUOC P08/B0036/01625 28 .NET Framework
Estructura de un ensamblado multifichero, con manifest incluido en uno de los mdulos
Estructura de un ensamblado multifichero, con manifest por separado
Otra forma de agrupar varios ficheros PE en un ensamblado es mediante la
utilidad de enlazado Al.exe, incluida en el .NET Framework SDK.
5.3.1. Visualizacin del contenido de un archivo PE
El .NET Framework SDK proporciona una herramienta llamada Ildasm.exe pa-
ra visualizar el contenido de un archivo PE. Con esta herramienta, podemos
ver el contenido del manifest (si se trata de un ensamblado), de los metadatos,
as como la estructura de tipos y elementos que contiene y el cdigo MSIL
generado por el compilador.
Bibliografa
Ms informacin sobre esta
herramienta en: .NET Frame-
work Developer's Guide. As-
sembly Linker (Al.exe).
FUOC P08/B0036/01625 29 .NET Framework
Ventana principal de Ildasm. Estructura del archivo PE
Contenido del manifest de un ensamblado
5.3.2. Internacionalizacin
Los ensamblados tambin pueden tener un lenguaje o cultura asociados. En
general, cuando se desarrollan ensamblados, stos se generan como cultura
neutral, pero cuando es necesario internacionalizar la aplicacin, se puede
asignar una o ms culturas al ensamblado, de forma que en funcin de la cul-
tura del sistema operativo donde se ejecute la aplicacin, se mostrar un len-
guaje u otro.
Si se definen varias culturas para un ensamblado, se generar un ensamblado
comn que contiene la funcionalidad y otros ensamblados llamados ensam-
blados satlite (uno para cada lenguaje), que contienen toda la informacin
referente a la cultura.
FUOC P08/B0036/01625 30 .NET Framework
5.4. Global assembly cache
Los ensamblados comunes o compartidos son los utilizados por varias aplica-
ciones instaladas en la mquina. Por ejemplo, los ensamblados del .NET Fra-
mework son ensamblados comunes.
Anteriormente a .NET, la gestin de las libreras comunes tena mltiples pro-
blemas, como la dependencia con el registro del sistema y los problemas de
compatibilidad entre versiones, llamado frecuentemente como el infierno de
las DLL. La gestin de ensamblados en .NET ha sido diseada para solucionar
estos problemas.
La GAC permite compartir varias versiones de un mismo ensamblado, de for-
ma que diferentes aplicaciones que necesiten versiones diferentes puedan fun-
cionar correctamente. Las ventajas principales de almacenar un ensamblado
en la GAC son las siguientes:
Mejora del rendimiento. Al estar en la GAC, el ensamblado no necesita ser
comprobado cada vez que se carga. Adems, si hay ms de una aplicacin
que lo referencia slo se carga una instancia en memoria. Por ltimo, el
entorno de ejecucin puede encontrar el ensamblado ms rpidamente,
ya que es el primer lugar donde el entorno de ejecucin busca los ensam-
blados referenciados por una aplicacin.
Seguridad de ficheros. Slo el administrador del sistema puede borrar en-
samblados de la GAC.
Gestin de versiones. Diferentes copias de un mismo ensamblado con el
mismo nombre, pero diferente versin, pueden coexistir dentro de la GAC.
Los ensamblados comunes son almacenados en un directorio llamado GAC
(global assembly cache). El contenido de este directorio se puede visualizar ex-
plorando el directorio 'Assembly' dentro de la carpeta donde estn instalados
los ficheros de Windows, por ejemplo, 'C:\Windows\Assembly'. Tambin po-
demos ver su contenido mediante la utilidad 'Configuracin de Microsoft .NET
Framework 2.0' dentro de 'Herramientas administrativas' del panel de control.
Esta herramienta nos permite, adems, agregar nuevos ensamblados a la GAC
o eliminar alguno de los existentes.
FUOC P08/B0036/01625 31 .NET Framework
Visualizacin del contenido de la global assembly cache
Podemos desinstalar o ver las propiedades de un ensamblado mediante las
opciones del men contextual que aparece al pulsar el botn derecho del ratn
sobre cada uno de ellos.
Propiedades de un ensamblado de la GAC
5.4.1. Strong name
Antes de compartir un ensamblado en la GAC, es necesario asignarle un strong
name. El strong name es un mecanismo de identificacin nica para cada en-
samblado, formado por las siguientes partes:
Un nombre simple
La clave publica de una clave criptogrfica
FUOC P08/B0036/01625 32 .NET Framework
Una firma digital generada con la clave privada de la misma clave cripto-
grfica
La clave criptogrfica se puede generar con la herramienta Sn.exe del .NET
Framework. La instruccin crea una clave nueva y la guarda en el fichero
clave.snk:
sn k clave.snk
Para firmar un ensamblado con una clave criptogrfica, podemos utilizar el ar-
gumento /keyfile al compilar el ensamblado utilizando alguno de los com-
piladores de los lenguajes .NET. Tambin es posible modificar las propiedades
del proyecto en Visual Studio para que se firme el ensamblado automtica-
mente al generar el proyecto.
El strong name garantiza que el ensamblado no ha sido modificado despus de
su compilacin. Al ejecutar un ensamblado, el CLR realiza una comprobacin
criptogrfica, y si ha sido modificado desde su compilacin no se ejecuta. Para
asegurar, adems, que el ensamblado proviene de un origen de confianza, es
necesario utilizar certificados digitales para crear el strong name.
5.4.2. Instalacin en la GAC
Una vez hemos creado un strong name para un ensamblado, ya podemos co-
locarlo dentro de la GAC. Para ello, se utiliza la herramienta GACUtil.exe del
.NET Framework SDK. Con la opcin /i podemos instalar un ensamblado en la
GAC, mientras que con la opcin /u podemos desinstalarlo. Para utilizar esta
herramienta, es necesario pertenecer al grupo de Administradores del equipo.
5.4.3. Versionado
El CLR usa un sistema de versionado para controlar las actualizaciones y ase-
gurar la compatibilidad. La gestin de versiones se aplica a los ensamblados
compartidos, ya que los ensamblados privados se instalan siempre en el propio
directorio de la aplicacin (es responsabilidad del distribuidor de la aplicacin
de que todos los componentes sean compatibles entre s).
Cada ensamblado tiene asignadas las dos versiones siguientes:
Un nmero de versin de compatibilidad formado por 4 enteros, que tiene
la siguiente estructura:
<versin mayor>.<versin menor>.<numero de
compilacin>.<revisin>
Los dos primeros nmeros identifican la versin del producto, mientras
que el tercero identifica el nmero de compilaciones del ensamblado que
se han realizado. Finalmente, el cuarto nmero se utiliza cuando hay que
repetir alguna compilacin fallida.
FUOC P08/B0036/01625 33 .NET Framework
A la hora de buscar la versin compatible de un ensamblado, se compara la
versin requerida por la aplicacin con las versiones del ensamblado dis-
ponibles en el GAC. Si la versin mayor o menor es diferente, esa versin
es incompatible con la aplicacin. Si la versin mayor y menor coinciden,
pero no el nmero de compilacin, existe un riesgo de incompatibilidad,
pero si no existe ninguna otra versin con el mismo nmero de compa-
tibilidad se escoge el ms cercano a la versin requerida. En caso de que
el nico nmero que difiera sea el de revisin o que todos los nmeros
coincidan, se considera que la versin es compatible.
Un nombre a efectos de documentacin.
5.4.4. Ejecucin 'side-by-side'
El CLR es capaz de ejecutar varios ficheros con el mismo nombre pero situados
en lugares distintos del disco, dentro del mismo espacio de direcciones. Este
mecanismo permite la compatibilidad entre diferentes versiones de un mismo
ensamblado.
FUOC P08/B0036/01625 35 .NET Framework
Bibliografa
Richter, Jeffrey (2002). Applied Microsoft .NET Framework Programming. Microsoft Press.
http://msdn.microsoft.com/netframework/

También podría gustarte