Asamblea de.NET

En el marco.NET, una asamblea es una biblioteca del código compilado usada para despliegue, versioning, y seguridad. Hay dos tipos: asambleas de proceso (EXE) y asambleas de la biblioteca (DLL). Una asamblea de proceso representa un proceso que usará clases definidas en asambleas de la biblioteca. las asambleas de.NET contienen el código en CIL, que por lo general se genera de una lengua CLI, y luego compilado en el lenguaje de máquina en el tiempo de ejecución por el compilador justo a tiempo CLR.

Una asamblea puede consistir en uno o varios archivos. Los archivos del código se llaman módulos. Una asamblea puede contener más de un módulo del código y ya que es posible usar lenguas diferentes para crear módulos del código es técnicamente posible usar varias lenguas diferentes para crear una asamblea. El Estudio visual sin embargo no apoya lenguas diferentes que usan en una asamblea.

Nombres de la asamblea

El nombre de una asamblea consiste en cuatro partes

  1. El nombre corto. En Windows esto es el nombre del archivo de Portable Executable (PE) sin la extensión.
  2. La cultura. Esto es un identificador de 1766 RFC del lugar para la asamblea. En general, la biblioteca y las asambleas de proceso deberían ser la cultura neutra; la cultura sólo se debería usar para asambleas de satélite.
  3. La versión. Esto es un número punteado arreglado de cuatro valores — principal, menor, construya y revisión.
  4. Una señal de la clave pública. Esto es un picadillo de 64 bites de la clave pública que equivale a la llave privada usada para firmar la asamblea. Se dice que una asamblea firmada tiene un nombre fuerte.

La señal de la clave pública es usada para hacer el nombre de la asamblea único. Así, dos asambleas llamadas fuertes pueden tener el mismo nombre de fichero PE y aún el.NET los reconocerá como asambleas diferentes. El sistema de archivos de Windows (FAT32 y NTFS) sólo reconoce el nombre de fichero PE, por tanto dos asambleas con el mismo nombre de fichero PE (pero cultura diferente, versión o señal de la clave pública) no pueden existir en la misma carpeta de Windows. Para solucionar esta cuestión el.NET introduce el GAC (Escondite de la Asamblea Global) que es tratado como una carpeta sola por el.NET CLR, pero realmente se pone en práctica usando anidó carpetas del sistema de archivos.

Para prevenir ataques que bromean, donde una galleta trataría de hacer pasar a una asamblea que aparece como algo más, la asamblea se firma con una llave privada. El revelador de la asamblea intencionada guarda el secreto clave privado, por tanto una galleta no puede tener el acceso a ello, ni simplemente adivinarlo. Así la galleta no puede hacer su asamblea hacerse pasar por algo más, careciendo de la posibilidad de firmarlo correctamente después del cambio. La firma de la asamblea implica tomar un picadillo de partes importantes de la asamblea y luego codificar el picadillo con la llave privada. El picadillo firmado se almacena en la asamblea junto con la clave pública. La clave pública descifrará el picadillo firmado. Cuando el CLR cargue una asamblea fuertemente llamada generará un picadillo de la asamblea y luego comparará esto con el picadillo descifrado. Si la comparación tiene éxito entonces significa que la clave pública en el archivo (y de ahí la señal de la clave pública) tiene que ver con la llave privada usada para firmar la asamblea. Esto significará que la clave pública en la asamblea es la clave pública del editor de la asamblea y de ahí un ataque que bromea se previene.

Versiones de asambleas

Las asambleas de.NET pueden tener la información de la versión, permitiéndoles eliminar la mayor parte de conflictos entre aplicaciones causadas por asambleas compartidas. Sin embargo, esto no elimina todos los conflictos de versioning posibles entre asambleas.

Asambleas y seguridad.NET

La Seguridad de Acceso del Código de.NET está basada en asambleas y pruebas. Pruebas pueden ser algo deducido de la asamblea, pero típicamente se crea de la fuente de la asamblea — si la asamblea se descargó de Internet, un intranet, o se instaló en la máquina local (si la asamblea se descarga de otra máquina se almacenará en una posición sandboxed dentro del GAC y de ahí no se trata como instalado en la localidad). Los permisos se aplican a asambleas enteras, y una asamblea puede especificar los permisos mínimos que requiere a través de atributos de encargo (ver.NET metadata). Cuando la asamblea se cargue el CLR usará pruebas para la asamblea para crear un juego del permiso de uno o varios permisos de acceso del código. El CLR comprobará entonces para asegurarse que este juego del permiso contiene los permisos requeridos especificados por la asamblea.

El código de.NET puede realizar una demanda de seguridad de acceso del código. Esto significa que el código realizará un poco de acción privilegiada sólo si todas las asambleas de todos los métodos en la pila de llamada tienen el permiso especificado. Si una asamblea no tiene el permiso una excepción de seguridad se lanza.

El código de.NET también puede realizar la Demanda Unida de conseguir el permiso de la pila de llamada. En este caso el CLR mirará sólo un método en la pila de llamada en el Alto cargo para el permiso especificado. Aquí el paseo de la pila - a través de es ligado a un método en la pila de llamada por la cual el CLR supone que todos los otros métodos en la PILA DE LLAMADA tengan el permiso especificado. La Asamblea es una combinación de METADATA y archivo MSIL.

Asambleas de satélite

En general, las asambleas deberían contener recursos neutros por la cultura. Si quiere localizar su asamblea (por ejemplo usan cuerdas diferentes para lugares diferentes) debería usar asambleas de satélite — asambleas especiales, únicamente de recurso. Como el nombre sugiere, un satélite tiene que ver con una asamblea llamada la asamblea principal. Esa asamblea (dicen, lib.dll) contendrá los recursos neutros (que Microsoft dice es inglés Internacional, pero implica para ser inglés estadounidense). Cada satélite tiene el nombre de la biblioteca asociada añadida con.resources (por ejemplo lib.resources.dll). Dan al satélite un nombre de la cultura no neutro, pero ya que esto es ignorado por sistemas de archivos de Windows existentes (FAT32 y NTFS) esto significaría que podrían haber varios archivos con el mismo nombre de PE en una carpeta. Ya que esto no es posible, los satélites se deben almacenar en subcarpetas bajo la carpeta de aplicación. Por ejemplo, un satélite con los recursos ingleses del Reino Unido tendrá a. El nombre NETO de "lib.resources Version=0.0.0.0 Culture=en-GB PublicKeyToken=null", un nombre de fichero PE de lib.resources.dll, y se almacenará en una subcarpeta llamada el EN-GB.

Los satélites son cargados por una clase.NET llamada. El revelador tiene que proporcionar el nombre del recurso e información sobre la asamblea principal (con los recursos neutros). La clase de ResourceManager leerá el lugar de la máquina y usará esta información y el nombre de la asamblea principal para conseguir el nombre del satélite y el nombre de la subcarpeta que lo contiene. puede cargar entonces el satélite y obtener el recurso localizado.

Referirse a asambleas

Uno se puede referir a una biblioteca del código ejecutable usando la bandera de la referencia / del C# compilador.

Firma de la tardanza de una asamblea

Las asambleas compartidas tienen que dar un nombre fuerte para identificar únicamente la asamblea que se podría compartir entre las aplicaciones. El nombramiento fuerte consiste en la señal de la clave pública, cultura, versión y nombre de fichero PE. Si una asamblea probablemente se usará con el objetivo de desarrollo que es una asamblea compartida, el procedimiento de nombramiento fuerte contiene la sólo generación de la clave pública. La llave privada no se genera entonces. Sólo se genera cuando la asamblea se despliega.

Lengua de una asamblea

La asamblea se aumenta con el código de CIL, que es una lengua intermedia. El marco internamente convierte el CIL [bytecode] en el código de la asamblea natal. Si tenemos un programa que imprime "Hola el mundo", el código de CIL equivalente para el método es:

El.method vacío estático hidebysig privado Principal (cuerda [] args) cil manejó {\

.entrypoint

Vacío del caso de.custom [mscorlib] Sistema. STAThreadAttribute::.ctor = (01 00 00 00)

//Talla del código 11 (0xb)

.maxstack 1

IL_0000: ldstr "Hola el mundo"

IL_0005: llame el vacío [mscorlib] Sistema. Consola:: WriteLine (cuerda)

IL_000a: ret}//final de método Class1:: principal

Por tanto el código de CIL carga la Cuerda en la pila. Entonces llama la función de WriteLine y vueltas.



Buscar