Sie sind auf Seite 1von 36

.

NET Framework
David Gan Jimnez
P08/B0036/01625

FUOC P08/B0036/01625

.NET Framework

ndice

Introduccin.......................................................................................... Objetivos................................................................................................. 1. El .NET Framework....................................................................... 1.1. Ventajas principales del .NET Framework ................................ 1.2. Versiones de NET ...................................................................... 2. Common Language Runtime (CLR).......................................... 2.1. Funciones del CLR .................................................................... 2.2. Proceso de ejecucin de una aplicacin .NET .......................... 2.2.1. Compilacin .................................................................. 2.2.2. Enlazado ......................................................................... 2.2.3. Creacin de un dominio de aplicacin ......................... 2.2.4. Cargador de clases ......................................................... 2.2.5. Compilacin JIT ............................................................. 2.2.6. Ejecucin CLR ................................................................ 3. Common type system (CTS).......................................................... 3.1. Elementos del CTS .................................................................... 3.2. Tipos valor frente a Tipos referencia ........................................ 3.3. Tipos de miembros .................................................................... 3.4. Visibilidad .................................................................................. 3.5. CLS Common language specification........................................... 4. Framework Class Library (FCL)................................................. 4.1. Funcionalidades principales de la FCL ..................................... 4.2. Otros namespaces de la FCL ...................................................... 5. Ensamblados.................................................................................... 5.1. Caractersticas de los ensamblados ........................................... 5.2. Tipos de ensamblados ............................................................... 5.3. Estructura de un ensamblado ................................................... 5.3.1. Visualizacin del contenido de un archivo PE .............. 5.3.2. Internacionalizacin ...................................................... 5.4. Global assembly cache .............................................................. 5.4.1. Strong name...................................................................... 5.4.2. Instalacin en la GAC ................................................... 5.4.3. Versionado ..................................................................... 5.4.4. Ejecucin 'side-by-side' ....................................................

5 6 7 8 10 12 12 14 14 15 15 16 16 18 19 19 19 20 20 21 22 23 24 25 25 26 26 28 29 30 31 32 32 33

FUOC P08/B0036/01625

.NET Framework

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

35

FUOC P08/B0036/01625

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

FUOC P08/B0036/01625

.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

.NET Framework

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.

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 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 (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. 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.
(2)

Los threads o hilos de ejecucin son subprogramas que se ejecutan dentro de un mismo proceso simultneamente, compartiendo sus recursos
(3)

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)

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

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

Seguridad. El .NET Framework permite definir los permisos otorgados a un programa para realizar unas u otras acciones. Por ejemplo, se puede

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

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

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.

FUOC P08/B0036/01625

13

.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 aplicaciones 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. .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 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.
9 (9) 8 (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.

P/Invoke: Plattform Invoke

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.

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

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
(10)

Para que el CLR pueda ejecutar una aplicacin, es necesario agrupar todos los archivos PE generados en una estructura lgica llamada ensamblado 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
10

. Este

paso se denomina enlazado (link), y por lo general se realiza conjuntamente

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.

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.

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 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,

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

FUOC P08/B0036/01625

18

.NET Framework

2.2.6.

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.

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

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

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

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
(11)

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 APIs de programacin anteriores como COM11, ATL12 o MFC13. 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 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 pricontiene a su vez otros namespa-

COM (Component Object Model).


(12)

ATL (Active Template Library).

(13)

MFC (Microsoft Foundation Class Library).

FUOC P08/B0036/01625

23

.NET Framework

ces como System.Windows, y otros namespaces.

System.Web,

System.WebServices,

System.Security, o System.Data, que a su vez contienen nuevos tipos

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)
(14)

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.

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

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

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+, 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.

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

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

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

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

Bibliografa Ms informacin sobre esta herramienta en: .NET Framework Developer's Guide. Assembly Linker (Al.exe).

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.

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

FUOC P08/B0036/01625

30

.NET Framework

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.

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 ensamblado, 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 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

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

FUOC P08/B0036/01625

35

.NET Framework

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

Das könnte Ihnen auch gefallen