thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 2010
-
14 août 2007 à 14:20
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
10 nov. 2007 à 23:11
Bonjour a tous,
Je voudrais faire un chargement dynamique d'assembly à partir d'un nom complet de type
Par exemple, j'ai la valeur suivante "System.Windows.Form.ButtonBase" et je voudrais charger sont Type afin d'obtenir des informations par réflexion.
J'ai essayé différente surcharge de la méthode Assembly.Load() sans succès.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 14 août 2007 à 14:47
Salut,
Assembly.Load permet de charger un assembly dans le domaine d'application courant.
Tu devras le faire si l'assembly dans lequel se trouve le type désiré n'est pas déjà chargé.
Pour le type tu vas devoir utiliser par exemple une des méthodes Type.GetType.
thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 14 août 2007 à 16:57
Merci pour cette réponse Coq mais c'est vrai que ma question n'est pas trés clair.
Je suis en train de faire un générateur de Doc et je risque de rencontrer des références vers des types qui ne sont pas chargés.
J'ai besoin de charger ces types référencés pour obtenir des infos
Type.GetType() retourne null si le type n'est pas dispo (ex : Type.GetType("System.Windows.Forms.Button") dans une application type Console sans référence vers System.Windows.Forms.
Ce que je n'arrive pas a faire.
Retrouver un Type qui serait dans un assembly situé le GAC ou dans une liste de répertoire prédéfine dans la config.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 14 août 2007 à 18:11
Sans charger les assembly ce ne sera pas possible de déterminer s'ils contiennent le type.
Concernant le listing des assemblys du GAC, il y'a un peu de boulot d'appel aux APIs de Fusion, ce n'est pas à ma connaissance directement accessible.
Je regarde pour te faire un petit exemple.
thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 16 août 2007 à 12:07
Merci pour ton aide Coq
Pour ceux que ca intéresse...
Un p'tit exemple tout fait a partir du Wrapper de Junfeng Zhang
using System;
using System.Reflection;
using System.GACManagedAccess;
internal static void Main()
{
// Création de l'énumérateur
AssemblyCacheEnum oEnumerator = new AssemblyCacheEnum(null);
// Lecture du 1er assembly
string sAssemblyName = oEnumerator.GetNextAssembly();
while (sAssemblyName != null)
{
// Création de la référence vers l'assembly
AssemblyName oAssemblyName = new AssemblyName(sAssemblyName);
System.Diagnostics.Debug.WriteLine(oAssemblyName.Name);
// Test de chargement d'un assembly
if (oAssemblyName.Name.Equals("Microsoft.VisualC.VSCodeParser"))
{
Assembly oAssembly = Assembly.Load(oAssemblyName);
System.Diagnostics.Debug.WriteLine(oAssembly.FullName);
}
// Lecture du prochain assembly
sAssemblyName = oEnumerator.GetNextAssembly();
}