Chargement dynamique de type [Résolu]

Messages postés
186
Date d'inscription
lundi 11 mars 2002
Dernière intervention
30 novembre 2010
- - Dernière réponse : cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
3
Merci
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
*/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
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
*/
Commenter la réponse de cs_coq
Messages postés
186
Date d'inscription
lundi 11 mars 2002
Dernière intervention
30 novembre 2010
0
Merci
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
Commenter la réponse de thiosyiasar
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
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
*/
Commenter la réponse de cs_coq
Messages postés
186
Date d'inscription
lundi 11 mars 2002
Dernière intervention
30 novembre 2010
0
Merci
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
Commenter la réponse de thiosyiasar
Messages postés
186
Date d'inscription
lundi 11 mars 2002
Dernière intervention
30 novembre 2010
0
Merci
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
Commenter la réponse de thiosyiasar
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
Ca c'est du suivi de question, cool ! :-)

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.