2009-01-30 20 views
11

¿Cuál es la mejor manera de enumerar todos los ensamblados .NET 2.0 disponibles?Lista de todos los ensamblados .NET

Un ejemplo de la lista necesaria es la que MS Visual Studio muestra cuando hace 'Agregar referencia ...' en la pestaña .NET.

He leído Visual Studio usa su propia configuración de directorio y GAC otra y .NET instalación otra. ¿Alguna idea de cómo puedo saber dónde están estos directorios en una computadora de forma portátil (otra computadora podría tener Windows instalados en D: unidad, por ejemplo)?

A partir de la información indicada, debe ser posible Assembly.Loadxxxx().

Nota: Se debe realizar programáticamente y no usar gacutil por ejemplo (a menos que proporcione una API C#). El objetivo de todo esto es crear un editor de scripts dinámico personalizado para que comprenda la necesidad de acceder a esta información.

Respuesta

-1

La única información que he encontrado anteriormente sobre el mismo problema es this, pero nunca llegué a utilizar esa información.

Por lo que parece, parece un poco engorroso recorrer un directorio para encontrar todos los archivos .DLL, pero quizás eso es lo que debe hacer.

9

En primer lugar, existe una diferencia importante entre los ensamblajes de referencia y los ensamblajes en el GAC. Para compilar el código, necesita un ensamblaje de referencia. Para ejecutar código, necesita una copia del ensamblado en la misma carpeta que su .exe o el ensamblado en el GAC.

Normalmente, cuando instala una aplicación .NET, su instalador copiará los ensamblajes que utiliza en el GAC. Esos ensamblajes son no utilizables como ensamblados de referencia, no puede encontrar en qué carpeta está almacenada por lo que no puede decirle al compilador el valor correcto de su argumento de línea de comando/referencia. Bueno, puedes averiguarlo, pero Microsoft intentó hacerlo lo más difícil posible con un complemento de shell.

Algo diferente ocurre cuando instala una aplicación .NET que le permite usar sus ensamblajes en su propio programa. Al igual que el .NET framework. Hará dos copias de cada ensamblaje. Uno va al GAC, el otro va a un lugar "conocido". Para .NET Framework, estas ubicaciones conocidas son c: \ windows \ microsoft.net \ y c: \ program files \ reference assemblies. La última carpeta comenzó a ser utilizada por .NET 3.0 y posteriores.

El cuadro de diálogo Agregar referencia de Visual Studio utiliza una clave de registro que enumera estas ubicaciones conocidas. Hay un par, pero el más importante es HKLM\Software\Microsoft\.NETFramework\AssemblyFolders.

Resumen breve: podría usar esa clave de registro para producir la misma lista que produce el cuadro de diálogo Agregar referencia. Pero no es 100% confiable, es posible que falte a los ensambles de referencia que algún producto copiado en otro lugar. Tendría que usar la pestaña Examinar en VS para agregar referencias a esos. Y busca todo el disco para encontrarlos tú mismo.

+0

Acabo de probar el último punto en su respuesta y no funcionó. 'System.dll' por ejemplo no está incluido en ninguna de las rutas que se encuentran en' HKLM \ Software \ Microsoft \ .NETFramework \ AssemblyFolders' – GETah

Cuestiones relacionadas