Está en la página 1de 36

.

NET Framework
David Gan Jimnez
P08/B0036/01625

.NET Framework

FUOC P08/B0036/01625

ndice

Introduccin..........................................................................................

Objetivos.................................................................................................

1. El .NET Framework.......................................................................

1.1. Ventajas principales del .NET Framework ................................

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

.NET Framework

FUOC P08/B0036/01625

Bibliografa............................................................................................

35

FUOC P08/B0036/01625

Introduccin

El .NET Framework es el componente principal de Microsoft .NET. Constituye


la plataforma de desarrollo de las aplicaciones .NET e incluye las herramientas 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.

.NET Framework

FUOC P08/B0036/01625

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.

.NET Framework

FUOC P08/B0036/01625

1. El .NET Framework

El .NET Framework es el conjunto de componentes y herramientas que permiten la ejecucin de aplicaciones .NET. Para desarrollar aplicaciones .NET se
utilizan las herramientas del .NET Framework SDK. Dentro del .NET Framework 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 aplicaciones puede realizarse, aunque la aplicacin est desarrollada en diferentes
lenguajes de programacin.

CLS (common language specification) y lenguajes .NET. CLS es una especificacin 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 lenguajes desarrollados por terceros puedan acoplarse fcilmente a la plataforma, y ya existe una gran variedad de ellos, entre los cuales podemos encontrar versiones de COBOL, FORTRAN, Ada, Pascal, Haskell, Eiffel, Delphi, etc.

FCL (framework class library). La biblioteca de clases comunes est compuesta 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 funcionalidades 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.

.NET Framework

FUOC P08/B0036/01625

.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 lenguaje C#, han sido estandarizados por ECMA (European Computer Manufacturers 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 proporcionan 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 entorno comn de desarrollo y ejecucin para todos los lenguajes .NET. Todos 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
1

de depuracin , el sistema de excepciones, la gestin automtica de memoria, 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 excepciones 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

.NET Framework

El .NET Framework incluye cuatro lenguajes de programacin desarrollados 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 empresas 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 componentes que encapsulan tareas comunes, como el acceso a bases de datos, la
creacin y gestin de formularios de usuario, la creacin y control de threads2 de ejecucin, etc.

(2)

Los threads o hilos de ejecucin


son subprogramas que se ejecutan dentro de un mismo proceso
simultneamente, compartiendo
sus recursos
(3)

Adems, algunas de las tareas necesarias en COM como la gestin de memoria o el control de punteros, que son fuente de muchos de los problemas 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 punteros3.

Simplifica la instalacin. Los componentes .NET no necesitan aadir informacin en el registro del sistema para funcionar, ni es necesario definir
interfaces MIDL4 para su utilizacin, ya que son autodescriptivos. Esto implica que los componentes .NET se pueden instalar simplemente copian-

Tanto los punteros como las referencias contienen direcciones


de memoria. La diferencia fundamental es que mediante un puntero se puede consultar la direccin
de memoria que almacena, mientras que con una referencia slo se
puede acceder al valor que se almacena en la direccin de memoria que indica la referencia.
(4)

MIDL (Microsoft interface definition language) es el lenguaje utilizado para describir los componentes COM y sus funcionalidades, para que puedan ser utilizados por
otras aplicaciones.

do los ensamblados correspondientes en la carpeta deseada de la mquina


destino. El nico requisito es que el motor de ejecucin del .NET Framework est instalado.
Por otro lado, es posible tener ms de una versin de un mismo componente coexistiendo en el mismo ordenador, de forma que si una determinada aplicacin necesita una versin anterior a otra ms moderna, recientemente instalada, puede seguir funcionando sin problemas. De esta
forma, se soluciona el problema del llamado DLL 5 Hell de los componentes 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 comportamiento 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

(5)

DLL (dynamic link library). Ficheros binarios que contienen un conjunto de funcionalidades comunes
que forman parte de una aplicacin. 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

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 pueden 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 versin 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 sistema 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 anterior, 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 herramientas 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 producto) 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 sistema 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 lenguajes .NET, como son los tipos genricos o los tipos abstractos. Tambin
aparece una segunda versin del .NET Compact Framework para dispositivos 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.

.NET Framework

FUOC P08/B0036/01625

11

.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 funcionalidades que facilitan la creacin de aplicaciones SOA orientadas
a servicio (Service Oriented Architecture).

Windows workflow foundation (WWF). Incluye funcionalidades y herramientas para crear flujos de trabajo que se pueden ejecutar desde una
aplicacin.

Windows cardspace (WCS). Permite almacenar de forma segura la identidad 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 prevista 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 mviles (.NET Compact Framework 3.5).
En esta versin del Framework s que se incluye una nueva versin del motor 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.

.NET Framework

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 aplicaciones .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 gestionado7. 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 memoria 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 memoria utilizada por las aplicaciones .NET. Cuando una porcin de memoria 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 componentes 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 Infrastructure), disponible en <http://
msdn.microsoft.com/ca-es/netframework/default(en-us).aspx>.
Por otro lado, existe una implementacin libre del CLI desarrollada 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 aplicaciones que gestiona los recursos, la
memoria, asegura la ejecucin de
cdigo seguro, etc.

13

FUOC P08/B0036/01625

.NET Framework

te, las aplicaciones que utilizan la versin antigua siguen funcionando correctamente.

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 ejecutar 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 instalacin al directorio destino.

Interoperabilidad con cdigo no gestionado. Aparte de ejecutar aplicacio8

nes gestionadas, el CLR permite interactuar con cdigo no gestionado .


Todo el cdigo que no es ejecutable por el CLR se denomina unmanaged code (cdigo no gestionado o no administrado). Por ejemplo, todas las aplicaciones de win32 o COM son unmanaged code.

(8)

Se conoce como cdigo gestionado el cdigo que administra o


gestiona el CLR, es decir, el cdigo 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.

.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 soporta:

Cdigo gestionado que utiliza funciones no gestionadas desde una .dll. El


9

mecanismo de P/Invoke permite realizar llamadas a funciones que se encuentran 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 herramientas Tlbexp.exe y Regasm.exe, incluidas en el .NET Framework, es posible crear un objeto COM que describa y se comunique con el tipo gestionado, y registrarlo en el sistema de forma que otras aplicaciones COM
puedan utilizarlo.

(9)

P/Invoke: Plattform Invoke

FUOC P08/B0036/01625

14

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 lenguaje de programacin utilizado.
El proceso de compilacin consiste en traducir el cdigo fuente a cdigo IL,
tambin llamado MSIL (intermediate language o Microsoft intermediate language), un lenguaje intermedio parecido al cdigo mquina, pero que no puede ser
ejecutado directamente por el procesador (es independiente del procesador).

.NET Framework

FUOC P08/B0036/01625

15

.NET Framework

Todos los lenguajes de .NET compilan a un cdigo intermedio comn denominado MSIL (MicroSoft intermediate language) o simplemente IL (intermediate
language). De esta forma, los componentes se ejecutan igual en el CLR independientemente del lenguaje y de la plataforma en los que fueron creados.
La tarea de compilacin se lleva a cabo mediante una aplicacin llamada compilador. Cada compilador permite compilar cdigo fuente escrito en un lenguaje 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 veremos 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 informacin 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 operativo; la diferencia est en que un dominio de aplicacin requiere menos recursos que un proceso del sistema. De hecho, un proceso puede alojar ms de
un dominio de aplicacin.

(10)

Aunque la extensin de los ensamblados coincide con la de las libreras dinmicas (.dll) o los archivos ejecutables de Windows (.exe),
el contenido de estos ficheros slo
se puede ejecutar mediante el CLR.

FUOC P08/B0036/01625

16

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 directamente, aunque puede que esto sea posible en el futuro. Por ello, es necesario 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 referenciados en su cdigo y guarda, en una estructura de datos interna, toda la informacin 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 correspondiente es traducido a cdigo mquina por un compilador llamado JIT compiler (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 incorrectas, que los mtodos se llaman con el nmero de parmetros correctos,

.NET Framework

FUOC P08/B0036/01625

17

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 almacenados 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 optimizado 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 almacena 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 JITcompiler, independientemente del lenguaje original en el que fue desarrollada 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 programa se va ejecutando se compilan los mtodos solicitados que no han sido compilados previamente. El cdigo nativo generado se guarda para su
posterior uso. Esto evita que se compilen partes del cdigo MSIL que quizs no se usen casi nunca hasta que no sea necesario.

.NET Framework

FUOC P08/B0036/01625

2.2.6.

18

Ejecucin CLR

El cdigo generado por el compilador JIT se denomina cdigo nativo gestionado, 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 invlidas, controla la memoria, comprueba la seguridad, etc. Este cdigo s que
es ejecutable directamente por el procesador.

.NET Framework

FUOC P08/B0036/01625

19

3. Common type system (CTS)

El CTS o sistema comn de tipos, define las reglas que debe cumplir la definicin 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, caracteres, 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 mismos 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 denominada 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.

.NET Framework

FUOC P08/B0036/01625

20

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 identifican 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 pblico, 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 cualquier tipo derivado.

Ensamblado. El miembro es accesible desde cualquier tipo que se encuentre 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 dependen 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 siguientes, menos frecuentes y no disponibles en todos los lenguajes, aunque si soportados por el CTS:

.NET Framework

FUOC P08/B0036/01625

21

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 protected 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 Common language specification (CLS), que determina el conjunto mnimo de caractersticas 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 anterior:

Esquema de compatibilidad entre lenguajes

.NET Framework

22

FUOC P08/B0036/01625

.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 objetos, por lo que es mucho ms sencilla de utilizar y de comprender que otras

(11)

COM (Component Object Model).

APIs de programacin anteriores como COM11, ATL12 o MFC13.

(12)

La FCL est organizada como una estructura de directorios, para organizar los

(13)

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 namespace) 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 namespaces 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 encuentran clases bsicas como Object,
mitivos. El namespace System

Console

o los tipos pri-

contiene a su vez otros namespa-

ATL (Active Template Library).

MFC (Microsoft Foundation


Class Library).

23

FUOC P08/B0036/01625

ces como System.Windows,

System.Web,

.NET Framework

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 mtodos 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 dinmicas de Microsoft. Es un nuevo entorno, desarrollado desde cero (no
est basado en ASP14, la versin anterior) que se ejecuta en Internet Information Services (IIS) y simplifica a los programadores la escritura de cdigo para construir pginas web basadas en HTML que se muestran en un
explorador.
ASP.NET caracteriza una forma nueva, independiente del lenguaje, de escribir cdigo y ligarlo a peticiones de pginas web. Introduce los formularios 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 formulario de Windows Forms.
ASP.NET contiene caractersticas importantes de seguridad y administracin 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 formularios web de ASP.NET para las aplicaciones de Windows. Permite desarrollar fcilmente interfaces grficas potentes, sin tener que escribir ms
cdigo de la cuenta. Visual Studio proporciona un diseador de formularios, que permite desarrollar la interfaz grfica con WinForms de manera
visual.

ADO.NET (System.Data). ADO.NET es una versin mejorada y rediseada 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, ste la procesa, y devuelve una pgina HTML generada dinmicamente en funcin de las peticiones del
usuario. ASP y ASP.NET se ejecutan sobre IIS, el servidor de pginas web de Microsoft Windows

FUOC P08/B0036/01625

24

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+, conocido 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 internacionalizacin de aplicaciones.

System.Reflection. Utilidades para inspeccionar tipos en tiempo de


ejecucin.

System.Text. Utilidades para trabajar con texto en diferentes codificaciones (ASCII, unicode, etc.)

System.Xml. Utilidades que permiten trabajar con documentos XML.

.NET Framework

FUOC P08/B0036/01625

25

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 punto 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 pequea 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 estructura (metadatos), informacin necesaria para acceder a ellos y utilizarlos
correctamente, y un conjunto de informacin adicional sobre el ensamblado, 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 incluye 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 ensamblados.
Es posible mantener varias versiones de un mismo ensamblado en la misma mquina. A la hora de ejecutar una aplicacin que utilice ese ensamblado, se buscar y utilizar una versin del ensamblado que sea compatible con ella.

.NET Framework

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 almacenado 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 necesarios ensamblados estticos. Los ensamblados dinmicos se utilizan cuando 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 instalan 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 informacin 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 informacin 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

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 informacin 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.

.NET Framework

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 para 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 Framework Developer's Guide. Assembly Linker (Al.exe).

FUOC P08/B0036/01625

29

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 cultura del sistema operativo donde se ejecute la aplicacin, se mostrar un lenguaje u otro.
Si se definen varias culturas para un ensamblado, se generar un ensamblado
comn que contiene la funcionalidad y otros ensamblados llamados ensamblados satlite (uno para cada lenguaje), que contienen toda la informacin
referente a la cultura.

.NET Framework

FUOC P08/B0036/01625

30

5.4. Global assembly cache


Los ensamblados comunes o compartidos son los utilizados por varias aplicaciones instaladas en la mquina. Por ejemplo, los ensamblados del .NET Framework son ensamblados comunes.
Anteriormente a .NET, la gestin de las libreras comunes tena mltiples problemas, 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 forma que diferentes aplicaciones que necesiten versiones diferentes puedan funcionar 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 ensamblados referenciados por una aplicacin.

Seguridad de ficheros. Slo el administrador del sistema puede borrar ensamblados 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 explorando el directorio 'Assembly' dentro de la carpeta donde estn instalados
los ficheros de Windows, por ejemplo, 'C:\Windows\Assembly'. Tambin podemos 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.

.NET Framework

FUOC P08/B0036/01625

31

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 ensamblado, formado por las siguientes partes:

Un nombre simple

La clave publica de una clave criptogrfica

.NET Framework

32

FUOC P08/B0036/01625

.NET Framework

Una firma digital generada con la clave privada de la misma clave criptogrfica

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 argumento /keyfile al compilar el ensamblado utilizando alguno de los compiladores de los lenguajes .NET. Tambin es posible modificar las propiedades
del proyecto en Visual Studio para que se firme el ensamblado automticamente 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 colocarlo 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 asegurar 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

A la hora de buscar la versin compatible de un ensamblado, se compara la


versin requerida por la aplicacin con las versiones del ensamblado disponibles 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 compatibilidad 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.

.NET Framework

FUOC P08/B0036/01625

35

Bibliografa
Richter, Jeffrey (2002). Applied Microsoft .NET Framework Programming. Microsoft Press.
http://msdn.microsoft.com/netframework/

.NET Framework

También podría gustarte