¿Cómo extraer un ensamblaje del GAC?


Hay un paquete con el que tengo que lidiar que instala ensamblados directamente en el GAC (por ejemplo, en algún lugar profundo en %windows%/assembly).

¿Cómo exorcizo el ensamblado real (el DLL) del GAC al sistema de archivos normal?

Gracias.

Author: starblue, 2009-04-03

15 answers

Utilicé el consejo de este artículo para obtener una asamblea del GAC.

Obtener DLL de La GAC

DLL una vez desplegado en GAC (normalmente ubicado en c:\windows\assembly) no se puede ver o se utiliza como un archivo DLL normal. Le no se puede hacer referencia directamente desde VS proyecto. Los desarrolladores suelen mantener una copia del archivo DLL original y refiérase a él en el proyecto en tiempo de desarrollo (diseño), que utiliza la asamblea del GAC durante tiempo de ejecución del proyecto.

Durante la ejecución (tiempo de ejecución) si el asamblea se encuentra para ser firmado y implementado en GAC el CLR automáticamente recoge el montaje del GAC en lugar de la DLL referenciada durante tiempo de diseño en VS. En caso de que el el desarrollador ha eliminado la DLL original o no lo tengo por alguna razón, hay una manera de obtener el archivo DLL de GAC. Siga los siguientes pasos para copiar DLL desde GAC

  1. Ejecute regsvr32 / u C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll

    • shfusion.dll es una extensión de explorador DLL que da una distinta mira la carpeta GAC. Anulación del Registro este archivo eliminará el ensamblado el visor de caché y la carpeta GAC ser visible como cualquier carpeta normal en explorer.
  2. Abra "% windir% \ assembly \ GAC_MSIL".

  3. Navegue a su carpeta DLL en la profundidad para encontrar su DLL.

  4. Copiar el DLL en algún lugar de su disco duro y referirlo desde allí en su proyecto

  5. Ejecutar " regsvr32 % windir% \ Microsoft. NET \ Framework\<.> \shfusion.dll" a vuelve a registrar la shfusion.archivo dll y recuperar la visión distinta original de GAC.

 144
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-16 17:17:52

El método descrito aquí es muy fácil:

Http://andreasglaser.net/post/2008/08/05/Extract-assembly-from-Global-Assembly-Cache-(GAC)-with-network-drive-mapping.aspx

Resumen del Artículo:

  • Asignar una unidad de red (Explorer - > Herramientas)
    • Asignar a \nombre_servidor \ carpeta (\\YourServer\C$\Windows\Assembly)
  • No hay necesidad de compartir si usted es el Administrador
  • Vaya a la unidad y extraiga su ensamblaje
 107
Author: Sadjad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-07 15:56:34

Abra el símbolo del sistema y Escriba :

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

Esto debería dar el volcado de todo el GAC

Disfrute!

 74
Author: Deepak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-20 12:22:12

Sí.

Agregar la clave de registro DisableCacheViewer

Cree una nueva clave dword bajo HKLM\Software\Microsoft\Fusion\ con el nombre DisableCacheViewer y establezca su valor [DWORD] en 1.

Vuelva al Explorador de Windows a la carpeta assembly y será la vista normal del sistema de archivos.

 22
Author: mccrager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-03 17:37:58

Creo que la forma más fácil es hacerlo a través de la línea de comandos como David menciona. El único truco es que el .dll no se encuentra simplemente en C:\Windows\Assembly. Tienes que navegar hasta C:\Windows\Assembly\GAC\[ASSEMBLY_NAME]\[VERSION_NUMBER]_[PUBLIC KEY]. Luego puede hacer una copia usando:

Copie [ASSEMBLY_NAME].dll c:\ (o cualquier ubicación que desee)

Espero que eso ayude.

 15
Author: AdamB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-03 17:47:55

La manera fácil que he encontrado es abrir el símbolo del sistema y navegar por la carpeta que mencionas hasta que encuentres la DLL que deseas; luego puedes usar el comando copiar para sacarla. El explorador de Windows tiene una vista especial "útil" de esta carpeta.

 12
Author: David M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-03 17:34:34

Abrir EJECUTAR luego escriba %windir%\assembly\GAC_MSIL, esto abrirá sus archivos DLL en la vista de carpetas puede navegar a su carpeta dll llamada y abrirla, encontrará su archivo dll y copiarlo fácilmente

 6
Author: Hazem Abdel Wahab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-08 13:21:47

Soy el autor de PowerShell GAC. Con PowerShell GAC puede extraer ensamblados del GAC sin depender del funcionamiento interno del GAC, como cambiar las estructuras de carpetas.

Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
 4
Author: Lars Truijens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-21 20:09:42

Este post de MSDN blog describe tres formas distintas de extraer una DLL del GAC. A useful summary of the methods so far given.

 3
Author: MagicAndi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-28 14:36:06

Utilice el explorador de archivos "Total Commander" en su lugar.

  1. Habilite la opción "mostrar archivos ocultos / del sistema" en Total Commander
  2. Vaya a "c:\windows\assembly"
  3. copia
 2
Author: Max Wikström,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-27 12:33:05

Desde un script de Powershell, puede probar esto. Solo tenía una sola versión de la asamblea en el GAC, así que esto funcionó bien.

cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll |  Copy-Item -Destination "c:\folder to copy to"

Donde la ruta de ensamblado puede usar comodines.

 2
Author: Phil Kermeen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-25 09:51:31

Creo que descubrí una manera de mirar dentro del GAC sin modificar el registro o usar la línea de comandos, powershell o cualquier otro programa:

Cree un nuevo acceso directo (a cualquier lugar). A continuación, modifique el acceso directo para que el objetivo sea:

%windir%\assembly\GAC_MSIL\System

Abrir este acceso directo te lleva a la carpeta del sistema dentro del GAC (que todos deberían tener) y tiene el maravilloso efecto secundario de permitirte cambiar a un directorio superior y luego navegar en cualquier otra carpeta que desees (y ver los archivos dll, etc.)

Probé esto en Windows 7 y Windows Server 2012.

Nota: No le permitirá usar ese destino al crear el acceso directo, pero le permitirá editarlo.

Disfrute!

 2
Author: Bolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-11 19:26:09

Simplemente navegue hasta C:\Windows buscar la carpeta [assembly] haga clic derecho y seleccione agregar al archivo

Espera un poco

Vola tiene un archivo que contiene todos los ensamblados en su GAC

 1
Author: tsadigov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-20 08:52:55

Otra dirección just simplemente desempaquetar el archivo MSI y obtener las golosinas de esa manera. Te salva de la eventual desinstalación . . .

 0
Author: Wyatt Barnett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-13 19:44:58

No es necesario copiar desde una línea de comandos. He escrito el nombre de la DLL desde la ventana de inicio de búsqueda. Elegí Ver Más Resultados. El del GAC fue devuelto en la ventana de búsqueda. Hice clic derecho en él y dije abrir la ubicación del archivo. Se abrió en el explorador de Windows normal. Copié el archivo. Cerré la ventana. Terminado.

 0
Author: Scott Shaw-Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-09 22:37:06