2010-03-14 8 views
5

Sé que es un Windows PE32, pero también sé que la unidad de implementación en .NET es un ensamblado que a su vez tiene un manifiesto y puede estar compuesto por varios módulos administrados.¿Qué es un módulo administrado .NET?

Mis preguntas son:

1) ¿Cómo usted crear varios módulos administrados en la construcción de un proyecto como una librería de clases o una aplicación de consola, etc.

2) ¿Hay una manera de especificar que esto el compilador (a través de las propiedades del proyecto, por ejemplo) para dividir los archivos de código fuente en varios módulos administrados. Si es así, ¿cuál es el beneficio de hacerlo?

3) ¿Los módulos administrados pueden abarcar ensamblajes?

4) ¿Se crean archivos separados en el disco cuando se compila el código fuente o se crean en la memoria y se incrustan directamente en un ensamblaje?

EDIT:

@ Jon:

Para 2): Por lo tanto, no compilación de fuente/edificio en Visual Studio siempre crear un único módulo administrado? Si es así, no entiendo por qué VS no proporciona un mecanismo para hacerlo a pesar del hecho de que .NET admite hacerlo. Acepto que sería inmanejable crear un ensamblaje con módulos de diferentes idiomas. ¿Es esa la única razón por la cual .NET permite crear ensambles de múltiples módulos? Leí en Richter's CLR a través de C# que los módulos también pueden abarcar ensamblajes, y esto puede ayudar a mantener reducidos los tamaños de ensamblaje y reducir la huella de memoria descargando montajes bajo demanda cuando se invoca determinada funcionalidad por primera vez, pero no estoy seguro En cuanto a por qué uno querría abarcar un módulo a través de ensamblajes, ¿por qué no simplemente crear un nuevo ensamblaje cuya implícita crea un nuevo módulo en el proceso? Aún obtendrías los mismos beneficios.

Elemento 4) estaba relacionado con los archivos ".netmodule". Como parte del proceso de compilación VS, no he visto ningún archivo ".netmodule" creado en el directorio obj. Normalmente he notado .pdb, .dll/.exe y un archivo * FileListAbsolute y, por lo tanto, la pregunta sobre si se crean archivos separados para los módulos administrados.

EDIT: @ Jon: Aquí está el extracto de CLR a través de C# (3ª edición) Pg 43: Tal vez estoy leyendo mal esto, pero me suena que un módulo (que es un archivo que pertenece a una asamblea) se puede descargar a pedido.

"Por ejemplo, un conjunto puede constar de varios tipos. Se puede poner los tipos utilizados con frecuencia en un archivo y los tipos de uso menos frecuente en otro archivo. Si el montaje se despliega mediante la descarga a través de Internet, el archivo con los tipos poco utilizados pueden no tener que descargarse nunca al cliente si el cliente nunca accede a los tipos. Por ejemplo, un proveedor de software independiente (ISV) especializado en controles de interfaz de usuario puede elegir implementar tipos de accesibilidad activa en un módulo separado (al satisface los requisitos del logotipo de Microsoft). Solo los usuarios que requieran las características adicionales de accesibilidad requerirían que este módulo se descargue. lleno de

Configura una aplicación para descargar archivos de ensamblaje especificando un elemento codeBase (explicado en el Capítulo 3) en el archivo de configuración de la aplicación.El elemento codeBase identifica una URL que apunta a donde todos los archivos de un ensamblaje se puede encontrar "

Respuesta

6

1) No se puede hacer esto en Visual Studio Puede hacerlo desde la línea de comandos usando:..

csc /target:module Foo.cs Bar.cs 

En este caso acabaría con una llamada FLE Foo.netmodule

2) Véase la pregunta 1 -. no se puede hacer esto desde Visual Studio, pero puede hacerlo desde la línea de comandos no lo hago saber de cualquier beneficio. EDITAR: Estoy de acuerdo con la declaración de Andrew de que podría crear una asamblea desde varios idiomas de esta manera, pero creo que sería poco práctico. Tendría que idear una cadena de dependencia adecuada para que pueda construir primero un módulo completo, luego el siguiente, etc. ... en ese punto, ¿por qué no crear ensamblajes por separado en primer lugar? De hecho, sería un dominio de accesibilidad adicional ... pero eso es todo. Creo que las desventajas de esto probablemente superen las ventajas en casi todos los escenarios. Si realmente desea construir un único conjunto, siempre puede usar ilmerge después de construir ensamblajes separados.

3) Bueno, en teoría, un solo módulo podría incluirse en múltiples ensamblajes, pero no tendría sentido hacerlo, crearía un sistema muy confuso.

4) No estoy muy seguro de lo que quieres decir. Visual Studio crea algunos archivos intermedios en el directorio obj, si eso es lo que quiere decir. El compilador de la línea de comandos no deja ningún archivo extra por ahí, pero puede crear archivos intermedios que borra al finalizar, realmente no lo sé.

EDITAR: No creo que VS construya módulos como un paso intermedio. La compilación en Visual Studio siempre crea un único ensamblado por proyecto, y ese ensamblaje tiene un solo módulo. Cuando dice que CLR a través de C# dice que "los módulos pueden abarcar ensamblajes", ¿está seguro de que no quiere decir que los ensamblajes pueden abarcar múltiples módulos? Puede descargar módulos de un conjunto bajo demanda, pero no al revés. Si tiene una referencia específica, podría buscarla ...

+0

@Jon: Gracias por la respuesta. No tengo suficientes caracteres para incluir mis comentarios en este espacio, así que los agregué a la publicación original. Las ideas serían muy apreciadas. –

+0

@Jon: tienes razón. el libro no dice que un módulo puede abarcar ensamblajes. Lo leí mal pero dice que un módulo se puede descargar a pedido. He incluido el extracto de CLR a través de C# (3ª edición) Pg 43 en la publicación original. –

5

No puede crear módulos utilizando VS, pero puede hacerlo utilizando el compilador. Los módulos son archivos separados en el sistema de archivos, es posible tener varios módulos en un ensamblaje escritos en diferentes idiomas.

EDITAR: También puede colocar clases poco utilizadas en los módulos separados. Dichos módulos se cargarán solo cuando se necesiten clases.

+1

Eso sería interesante ... crear un ensamblaje único a partir de los lenguajes más adecuados para el problema. –

+0

@Andrew: Si te apegas a un solo lenguaje .NET, ¿hay algún motivo/escenario en particular en el que tendría sentido tener ensamblajes de múltiples módulos? –

+0

@Abhijeet Patel: He actualizado la respuesta. –

Cuestiones relacionadas