2010-05-17 20 views
6

Después de instalar .Net 4 y obtener algunas preguntas que ya fueron respondidas here También me di cuenta de cómo los dlls Framework se repiten en varios lugares para las diferentes versiones de Framework (esto no es nuevo, sucede con versiones anteriores, pero no había pagado atención hasta ahora)¿Por qué se repiten los marcos en varios lugares?

1 - GAC: directorio% SystemRoot% \ instalación de montaje

2- Marco:% SystemRoot% \ Microsoft.NET \ Framework \ v ...

de 3 y si tiene instalado el SDK de Windows, también en: C: \ Archivos de programa \ Microsoft SDKs \ Windows \

Creo que los últimos son los llamados "Conjuntos de referencia" y tienen metadatos adicionales para ayudar a Visual Studio, pero

¿qué ocurre con la ubicación número 2? ¿Por qué las asambleas se repiten allí?

+0

A supongo: ¿Para una instalación de reparación? – spender

Respuesta

1

Esto es más de una conjetura que una respuesta real, pero ...

Para GAC ​​inicialmente una DLL es necesario tener una DLL completa (también conocido como montaje no-referencia) para el GAC de usar. El ensamblaje de referencia no funcionará ya que no tiene código ejecutable. Por lo tanto, necesita una DLL real para obtener el GAC y obtener la ubicación n. ° 2.

+0

No, los conjuntos de referencia son copias literales, incluido el código. –

+0

@Hans, verdaderos conjuntos de referencia no son textuales. Tienen todos sus cuerpos IL desmantelados y no son ejecutables. No puedo recordar la parte superior de mi cabeza si los ensamblados de SDK instalados en Archivos de programa son en realidad ensambles de referencia verdaderos o simplemente se los menciona como tales. – JaredPar

+0

Ejemplo: c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ system.dll: 3178496 bytes. Versión de GAC: c: \ windows \ assembly \ gac_msil \ system \ 2.0.0.0__b77a5c561934e089 \ system.dll: 3178496 bytes. ¿Qué fue despojado? –

2
  1. No, esa es la ubicación del GAC para .NET 1.xa 3.5. El GAC para 4.0 se encuentra en c: \ windows \ microsoft.net \ assembly. El motivo por el que se movió no está claro, probablemente para evitar problemas con los proyectos que hacían referencia a conjuntos directamente desde el GAC, un gran no-no, pero se ha hecho.

  2. Sí, los conjuntos de referencia viven allí. También en c: \ archivos de programa \ ensamblados de referencia. Inicialmente son copias al pie de la letra de las asambleas almacenadas en el GAC. Hasta que implemente algún tipo de revisión. Mantenerlos separados garantiza que usted genere programas que se dirijan a los ensambles de marcos "apropiados", no lo que haya almacenado en su GAC.

  3. Sí, no hay ensamblados de marcos, solo herramientas de compilación.

+0

@Jared, muchas gracias por sus respuestas. El por qué tenemos ensamblados tanto en la carpeta SDK como en la carpeta Framework sigue siendo extraño, aún más si el tamaño de los archivos parece ser el mismo. Para la duplicación entre GAC y otras carpetas que parece tener más sentido para mí ahora. –

Cuestiones relacionadas