visual util studio ruta cache .net .net-4.0 gac

util - Arrastre y suelte una DLL al GAC("ensamblado") en el servidor de Windows 2008.net 4.0



visual studio gac location (7)

En .net 4.0, Microsoft eliminó la capacidad de agregar DLL al ensamblaje simplemente arrastrando y soltando.

En su lugar, debe usar gacutil.exe o crear un instalador para hacerlo. Microsoft en realidad no recomienda el uso de gacutil, pero seguí esa ruta de todos modos.

Para usar gacutil en una máquina de desarrollo vaya a:
Start -> programs -> Microsoft Visual studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt (2010)

Luego use estos comandos para desinstalar y Reinstalar respectivamente. Tenga en cuenta que NO .dll en el comando de desinstalación.
gacutil /u myDLL
gacutil /i "C:/Program Files/Custom/myDLL.dll"

Para usar Gacutil en una máquina que no sea de desarrollo, tendrá que copiar el archivo ejecutable y el archivo de configuración de su máquina dev a la máquina de producción. Parece que hay algunas versiones diferentes de Gacutil. El que funcionó para mí, encontré aquí:
C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Bin/NETFX 4.0 Tools/gacutil.exe C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Bin/NETFX 4.0 Tools/gacutil.exe.config

Copie los archivos aquí o en la carpeta .net correspondiente;
C:/Windows/Microsoft.NET/Framework/v4.0.30319

Luego use estos comandos para desinstalar y reinstalar respectivamente
"C:/Users/BHJeremy/Desktop/Installing to the Gac in .net 4.0/gacutil.exe" /u "myDLL"

"C:/Windows/Microsoft.NET/Framework/v4.0.30319/gacutil.exe" /i "C:/Program Files/Custom/myDLL.dll"

He intentado implementar algo de código en una máquina cliente, donde no quiero instalar las herramientas de MS Windows SDK. Esto significa que no tienen acceso a "gacutil". Tampoco he creado un instalador para mi código. Parece que estas podrían ser las únicas dos opciones en .net 4.0.

En el pasado, simplemente iría a iniciar, ejecutar, escribir "ensamblaje" y arrastrar y soltar mi dll.

¿Esto ya no es posible? Cuando intento hacer esto, no aparece ningún mensaje de error, pero la dll no aparece en la carpeta "ensamblaje". Cuando uso gacutil en mi máquina dev, funciona correctamente, pero la dll todavía no aparece.


En este caso, me incliné para copiar el archivo gacutil.exe, gacutil.exe.config Y TAMBIÉN el archivo gacutlrc.dll (del directorio 1033)


La utilidad gacutil no está disponible en las máquinas cliente, y la licencia Window SDK prohíbe redistribuirla entre sus clientes. Cuando su cliente no puede, no lo hará, (y realmente no debería) descargar el SDK de Windows de 300MB como parte del proceso de instalación de su aplicación.

Existe una API con soporte oficial que usted (o su instalador) puede usar para registrar un ensamblaje en la caché de ensamblados global. La tecnología Windows Installer de Microsoft sabe cómo llamar a esta API por usted. Debería consultar su utilidad de instalación de MSI (por ejemplo, WiX, InnoSetup) para obtener su propia sintaxis sobre cómo indicar que desea registrar un ensamblaje en la memoria caché de ensamblaje global.

Pero MSI y Gacutil no están haciendo nada especial. Simplemente llaman a la misma API a la que puedes llamarte tú mismo. Para obtener documentación sobre cómo registrar un ensamblado a través del código, consulte:

KB317540: DOC: las API de caché de ensamblados global (GAC) no están documentadas en la documentación del Kit de desarrollo de software (SDK) de .NET Framework

var IAssemblyCache assemblyCache; CreateAssemblyCache(ref assemblyCache, 0); String manifestPath = "D:/Program Files/Contoso/Frobber/Grob.dll"; FUSION_INSTALL_REFERENCE refData; refData.cbSize = SizeOf(refData); //The size of the structure in bytes refData.dwFlags = 0; //Reserved, must be zero refData.guidScheme = FUSION_REFCOUNT_FILEPATH_GUID; //The assembly is referenced by an application that is represented by a file in the file system. The szIdentifier field is the path to this file. refData.szIdentifier = "D:/Program Files/Contoso/Frobber/SuperGrob.exe"; //A unique string that identifies the application that installed the assembly refData.szNonCannonicalData = "Super cool grobber 9000"; //A string that is only understood by the entity that adds the reference. The GAC only stores this string //Add a new assembly to the GAC. //The assembly must be persisted in the file system and is copied to the GAC. assemblyCache.InstallAssembly( IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH, //The files of an existing assembly are overwritten regardless of their version number manifestPath, //A string pointing to the dynamic-linked library (DLL) that contains the assembly manifest. Other assembly files must reside in the same directory as the DLL that contains the assembly manifest. refData);

Más documentación antes de que se elimine el artículo de KB:

Los campos de la estructura se definen de la siguiente manera:

  • cbSize : el tamaño de la estructura en bytes.
  • dwFlags - Reservado, debe ser cero.
  • guidScheme - La entidad que agrega la referencia.
  • szIdentifier : cadena única que identifica la aplicación que instaló el ensamblado.
  • szNonCannonicalData : una cadena que solo comprende la entidad que agrega la referencia. El GAC solo almacena esta cadena.

Los valores posibles para el campo guidScheme pueden ser uno de los siguientes:

FUSION_REFCOUNT_MSI_GUID : una aplicación que se ha instalado mediante Windows Installer hace referencia al ensamblaje. El campo szIdentifier está configurado en MSI , y szNonCannonicalData está configurado en Windows Installer. Este esquema solo debe ser utilizado por el instalador de Windows. FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID : una aplicación que aparece en Agregar o quitar programas hace referencia al ensamblaje. El campo szIdentifier es el token que se utiliza para registrar la aplicación con Agregar o quitar programas . FUSION_REFCOUNT_FILEPATH_GUID : una aplicación representada por un archivo en el sistema de archivos hace referencia al ensamblaje. El campo szIdentifier es la ruta a este archivo. FUSION_REFCOUNT_OPAQUE_STRING_GUID: una aplicación que solo está representada por una cadena opaca hace referencia al ensamblaje. El szIdentifier es esta cadena opaca. El GAC no realiza verificación de existencia de referencias opacas cuando elimina esto.


Otras alternativas a un instalador y gacutil son herramientas de GUI como Gac Manager o GACAdmin . O si te gusta PowerShell, puedes usar PowerShell GAC de la que soy el autor.


Si tiene instalado .net Framework necesario. Ex; .Net 4.0 o .Net 3.5 , entonces puede simplemente copiar Gacutil.exe desde cualquier máquina y hasta la máquina nueva.

1) Abra CMD como administrador en el nuevo servidor.
2) Atraviese la carpeta donde copió el Gacutil.exe. Por ejemplo, archivos de programas C: / (en mi caso).
3) Escriba lo siguiente en el indicador de cmd e instale.

C: / Archivos de programa / gacutil.exe / I dllname


También puede copiar el archivo a GAC ​​usando un símbolo del sistema. Uso el siguiente script por lotes para copiar la DLL y reiniciar IIS.

copy /b/v/y "PathToAssembly/MyAssembly.dll" "C:/Windows/assembly/" iisreset /noforce pause

Guarda la necesidad de usar o instalar gacutil


Tenga en cuenta que la API de Fusion no está administrada. La referencia actual para ello está aquí: Guía de desarrollo> Referencia de API no administrada> Fusion

Sin embargo, hay un método administrado para agregar un ensamblado a GAC: System.EnterpriseServices.Internal.Publish.GacInstall Y, si necesita registrar cualquier tipo: System.EnterpriseServices.Internal.Publish.RegisterAssembly

La referencia para la clase de publicación está aquí: .NET Framework Class Library> System.EnterpriseServices Namespaces> System.EnterpriseServices.Internal

Sin embargo, estos métodos fueron diseñados para instalar componentes que son requeridos por una aplicación de servicio web como ASP.NET o WCF. Como resultado, no registran los ensamblajes con Fusion; por lo tanto, pueden ser desinstalados por otras aplicaciones o usando gacutil y hacer que su ensamblaje deje de funcionar. Por lo tanto, si los usa fuera de un servidor web donde un administrador administra el GAC, asegúrese de agregar una referencia a su aplicación en SOFTWARE / Wow6432Node / Microsoft / Fusion / References (para SO de 64 bits) o SOFTWARE / Microsoft / Fusion / References (para sistema operativo de 32 bits) para que nadie pueda eliminar sus ensamblajes de soporte a menos que desinstalen su aplicación.