¿Cómo comprobar programáticamente GAC para un conjunto?Comprobar GAC para un conjunto
Respuesta
Puede usar la API COM de Fusion. Junfeng Zhang escribió un managed wrapper. Es de 2004, sin embargo, así que no sé qué tan bien funciona.
¿Desea probar el GAC para un conjunto o simplemente desea saber que el conjunto existe en la máquina?
Si no te importa que el ensamblaje esté realmente en el GAC, pero solo se puede cargar en la máquina (desde el dominio de aplicación) puedes usar LoadAssembly con el nombre de los ensamblajes (fuerte, común, completo, etc.). Si el conjunto puede ser cargado por Fusion, lo será y entonces sabrá que existe.
Sin siquiera tratar de complicarse, puede pagar hasta gacutil
y capturar la salida. Por ejemplo, me da gacutil /l Microsoft.Practices.Unity
:
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31
bf3856ad364e35, processorArchitecture=MSIL
Number of items = 1
frente gacutil /l Some.Nonexistant.Assembly
:
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
Number of items = 0
Esto es fácil de implementar y analizar y no depende de ninguna implementación de terceros.
Descascarando 'gacutil.exe' y capturando la salida es mi definición de demasiado complicada, me gusta mantener las cosas lo más simples posible :) Si se trata de usar gacutil y la API de Fusion, entonces podría ser discutible. Vea mi respuesta aquí: http://stackoverflow.com/a/19459379/1004119. –
De .NET, la API de reflexión - Assembly.Load(...)
lanzará un FileNotFoundException
si no encuentra el ensamblaje. La API requiere un nombre de ensamblaje totalmente calificado, por lo que asumo que debe estar en el GAC. Lo estoy usando para detectar la presencia de SQL Server Compact Edition:
Assembly foo = Assembly.Load("System.Data.SqlServerCe, Version=3.5.1.0, " +
"Culture=neutral, PublicKeyToken=89845dcd8080cc91");
Assembly.Load también busca en otras ubicaciones: el contexto de carga predeterminado contiene ensamblajes encontrados probando el caché de ensamblados global, el ensamblado de host almacenado si el tiempo de ejecución está alojado (por ejemplo, en SQL Server) y ApplicationBase y PrivateBinPath de la aplicación dominio. - http://msdn.microsoft.com/cs-cz/library/dd153782.aspx – Bohdan
Quizás sea una idea combinar esto con el http://msdn.microsoft.com/en-us/library/system. reflection.assembly.globalassemblycache (v = vs.110) .aspx Propiedad GlobalAssemblyCache – ErikEJ
Es mejor utilizar ReflectionOnlyLoad
Método. este método carga un ensamblaje en el contexto de solo reflexión, donde puede examinarse pero no ejecutarse.
- 1. Instalación de un ensamblaje en GAC para mono/.NET
- 2. ¿A GAC, o no a GAC?
- 3. Revisando instalaciones GAC
- 4. Uso de Powershell para registrar un archivo en el Gac
- 5. Archivos de configuración para ensambles en GAC
- 6. cómo comprobar si el archivo pdb es válido para la depuración de un conjunto
- 7. Instalar un ensamblaje en GAC mediante programación
- 8. ¿Cómo extraer un ensamblaje del GAC?
- 9. FxCop y GAC Madness
- 10. Compartir un HttpModule entre varias subaplicaciones sin el GAC
- 11. enumerando conjuntos en GAC
- 12. ¿Por qué el conjunto de referencia de sitio web ASP.NET de GAC, al agregar referencia local?
- 13. Manera aseada de comprobar si un conjunto no contiene un nulo
- 14. ¿Cómo hacer referencia al ensamblaje desde GAC?
- 15. ¿Cómo comprobar si un usuario ha otorgado un cierto conjunto de permisos a mi aplicación PHP?
- 16. La mejor manera de comprobar si un archivo DLL es un conjunto CLR en C#
- 17. GAC y versiones de montaje
- 18. para comprobar un objeto coredata es nula
- 19. Conjunto MIPS para un bucle for simple
- 20. Conjunto TargetProfile para un proyecto de Azure
- 21. conjunto ExecCommand sólo para un div
- 22. Existencia de comprobación de hormigas para un conjunto de archivos
- 23. expresión XSLT para comprobar si la variable pertenece al conjunto de elementos
- 24. Utilice Visual Studio Setup Project para registrar automáticamente GAC y un COM Interop DLL
- 25. Usando Java Regex, ¿cómo comprobar si una cadena contiene alguna de las palabras de un conjunto?
- 26. underscore.js para comprobar nula
- 27. ¿Hay alguna herramienta para la gestión de GAC?
- 28. .net 4 confía parcialmente en un ensamblado de GAC
- 29. ¿Cómo agrego un ensamblado .NET al GAC en InnoSetup?
- 30. ¿Cómo verifico un conjunto de duplicados?
El uso de la API de Fusion basada en COM es la verdadera forma correcta, pero intentar un Assembly.Load y atrapar la excepción FileNotFoundException es mucho más fácil. –
@Mike Post: pero también tiene el desafortunado efecto secundario de cargar el ensamblado en el dominio de la aplicación, que no es realmente lo que se desea aquí. La facilidad de uso no siempre supera la corrección (yo diría que raramente lo hace). – casperOne
ReflectionOnlyLoad tiene el mismo efecto secundario de cargar el conjunto en el dominio de la aplicación. Lea la letra pequeña en los documentos. Es solo un trabajo diferente para tener que usar la complicada API COM Fusion no administrada. –