Chargement dynamique de type

Résolu
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 - 14 août 2007 à 14:20
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Derniè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.


Merci pour votre aide


Nico

7 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 août 2007 à 18:20
En fait ce ne sera pas forcément nécessaire, tu peux te baser sur le wrapper écris par Junfeng Zhang : http://blogs.msdn.com/junfeng/articles/229649.aspx

/*
coq
MVP Visual C#
CoqBlog
*/
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
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.

/*
coq
MVP Visual C#
CoqBlog
*/
0
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 3
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.

Voila mon probleme

Merci pour ton aide

A+

Nico
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
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.

/*
coq
MVP Visual C#
CoqBlog
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 3
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();
}

}



Nico
0
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 3
8 nov. 2007 à 19:18
Salut,

Pour ceux que ca intéresse, voici la source ou j'ai utilisé la réponse de coq :
http://www.csharpfr.com/code.aspx?ID=44645

Nico
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 nov. 2007 à 23:11
Ca c'est du suivi de question, cool ! :-)

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous