IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Récupérer les propriété dans une DLL


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Récupérer les propriété dans une DLL
    Bonjour à tous,

    Je me permet de sollicité votre aide car je cherche à récupérer les objets et propriété d'une DLL chargé dynamiquement.
    Le but, c'est que l'utilisateur sélectionne sa DLL (la plus part du temps se sera le domaine d'entité du projet) à l'aide de l'outil et celui ci, en sort tout les objets avec leurs propriétés

    J'ai chercher du coté de Load Assemblies mais sans trop comprendre.

    En vous remerciant par avance,

    Tom

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Tu peux utiliser Assembly.Load(string file) si c'est pour examen des objets et leurs props du dll...Les assemblies dependants ne sont pas charges....
    doc msdn:
    Use the LoadFile method to load and examine assemblies that have the same identity, but are located in different paths. LoadFile does not load files into the LoadFrom context, and does not resolve dependencies using the load path, as the LoadFrom method does. LoadFile is useful in this limited scenario because LoadFrom cannot be used to load assemblies that have the same identities but different paths; it will load only the first such assembly.
    Le 1er code est un projet Test et via une boite de dialogue permet de choisir soit un .dll soit un .exe:
    (j'ai reference expres un projet ClassLibrary1 avec 2 class pour voir que meme si tu charges le "projet test lui-meme " il ne liste pas l'assembly reference ClassLibrary1 )...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Reflection;
    using ClassLibrary1;
    namespace WinLoadAssembliesReflectionOnly
    {
        public partial class Form1 : Form
        {
            Assembly asm = null;
            private Class1 cl1 = new Class1();
            private Class2 cl2 = new Class2();
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                string fileName =string.Empty;
                openFileDialog1.Filter = "files(*.dll)|*.dll|files(*.exe)|*.exe";
                if (openFileDialog1.ShowDialog()==DialogResult.OK )
                {
                    fileName = openFileDialog1.FileName;
                    if (string.IsNullOrEmpty(fileName))
                        return;
     
                    asm = Assembly.LoadFrom(fileName);
                    foreach (var item in asm.GetTypes())
                    {
                        listBox1.Items.Add(item);
     
                    }
                }
     
            }
     
     
     
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (listBox1.SelectedIndex == -1) return;
                if (asm == null) return;
                Type t = (Type)listBox1.SelectedItem;
                listBox2.Items.Clear ();
                foreach (var item in t.GetProperties())
                {
                    listBox2.Items.Add(item.Name);
                }
            }
     
        }
    }
    le 2eme code est un proj. Test qui charge tous les assemblies references par l'assembly en cours d'execution (et toutes les dependences meme les assemblies "Internals") y compris notre projet ClassLibrary1 et ses 2 class....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Reflection;
    using ClassLibrary1;
    namespace WinLoadAssembliesReflectionOnly
    {
        public partial class Form2 : Form
        {
            private  Assembly currentAsm = null;
            private List<string> listeRefAsm = new List<String>();
            private List<Type> listTypes = new List<Type>();
            private Class1 cl1 = new Class1();
            private Class2 cl2 = new Class2();
            public Form2()
            {
                InitializeComponent();
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                string fileName = string.Empty;
                currentAsm = Assembly.GetExecutingAssembly();
     
                foreach (var itemAsm in currentAsm.GetReferencedAssemblies ())
                {
                    MessageBox.Show(itemAsm.Name  );
                    listeRefAsm.Add(itemAsm.FullName);
                    listBox1.Items.Add(itemAsm.FullName  );
                }
                foreach (var itemAsm in listeRefAsm)
                {
                    currentAsm = Assembly.Load(itemAsm);
                    foreach (var itemType in currentAsm.GetTypes())
                    {
                        listTypes.Add(itemType);
                    }
     
                }
                listBox2.DataSource = listTypes;
     
            }
     
            private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (listBox2.SelectedIndex == -1) return;
                if (currentAsm == null) return;
                Type t = (Type)listBox2.SelectedItem;
                listBox3.Items.Clear();
                foreach (var item in t.GetProperties())
                {
                    listBox3.Items.Add(item.Name);
                }
     
            }
     
     
     
        }
    }

    nota-bene:
    -listbox1 affiche les noms des assemblies references,
    -listbox2 affiche les types dans chaque assembly
    -listbox3 affiche les props de chaque type sur selection dans listbox2...
    bon code...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse très constructive.

    Malheureusement j'ai une erreur:

    Une exception non gérée du type 'System.IO.FileLoadException' s'est produite dans mscorlib.dll

    Informations supplémentaires : Impossible de charger le fichier ou l'assembly 'file:///C:\Users\.....\bin\Debug\.....DomainEntities.dll' ou une de ses dépendances. L'opération n'est pas prise en charge. (Exception de HRESULT : 0x80131515)

    plus d'info: {"Tentative de chargement d'un assembly à partir d'un emplacement réseau qui aurait entraîné l'utilisation de l'assembly en mode Bac à sable (sandbox) dans les versions antérieures du .NET Framework. Cette version du .NET Framework n'activant pas la stratégie CAS par défaut, ce chargement peut être dangereux. Si ce chargement n'est pas destiné à utiliser l'assembly en mode Bac à sable (sandbox), activez le commutateur loadFromRemoteSources. Pour plus d'informations, consultez http://go.microsoft.com/fwlink/?LinkId=155569."}

    une idée ?
    Merci beaucoup

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Problème résolu
    http://cadxp.com/topic/32142-importe...l/page__st__20

    Il faut donc modifier les autorisations en faisant un clic droit sur le fichier *.dll, choisir "Propriétés" et, dans l'onglet "Général" cliquer sur "Débloquer".

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer les header dans une variable
    Par alex.hitman dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2007, 18h18
  2. Problème récupérer les valeurs dans une Hash
    Par pymouse dans le forum Langage
    Réponses: 4
    Dernier message: 12/07/2007, 17h11
  3. Récupérer les valeurs dans une fonction
    Par matmay dans le forum MATLAB
    Réponses: 3
    Dernier message: 04/05/2007, 16h50
  4. Récupérer les variables dans une popup
    Par Msieurduss dans le forum Langage
    Réponses: 4
    Dernier message: 21/08/2006, 20h05
  5. récupérer les paramètres dans une url
    Par asetti dans le forum ASP
    Réponses: 6
    Dernier message: 23/12/2005, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo