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

Windows Forms Discussion :

projet vbnet lister les références


Sujet :

Windows Forms

  1. #1
    Membre averti Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 315
    Points : 345
    Points
    345
    Par défaut projet vbnet lister les références
    comment peut t on faire pour lister les références utilisées dans un projet vb net?

    Comment faire pour charger ou décharger dynamiquement une référence .exe .dll ?

    merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Utilise la méthode Assembly.GetReferencedAssemblies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Imports System.Reflection
     
    ...
     
    Dim asm As Assembly = Assembly.GetEntryAssembly()
    For Each refAsm As Assembly In asm.GetReferencedAssemblies()
        Console.WriteLine(refAsm.GetName())
    Next
    Pour charger un assembly, on utilise Assembly.Load. Il n'est pas possible de décharger un assembly, sauf si tu l'as chargé dans un AppDomain séparé (auquel cas tu peux décharger l'AppDomain complet)

  3. #3
    Membre averti Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 315
    Points : 345
    Points
    345
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Utilise la méthode Assembly.GetReferencedAssemblies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Imports System.Reflection
     
    ...
     
    Dim asm As Assembly = Assembly.GetEntryAssembly()
    For Each refAsm As Assembly In asm.GetReferencedAssemblies()
        Console.WriteLine(refAsm.GetName())
    Next
    Pour charger un assembly, on utilise Assembly.Load. Il n'est pas possible de décharger un assembly, sauf si tu l'as chargé dans un AppDomain séparé (auquel cas tu peux décharger l'AppDomain complet)

    et concretement comment faire pour decharger un assembly? Auriez vous un exemple de code SVP?


    j'ai essayé ca mais ca n'a pas l'air de marcher !

    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
     
     
            Dim AssembliesLoaded = MyDomain.GetAssemblies()
     
     
     
            For Each MyAssembly As Assembly In AssembliesLoaded
     
     
     
                If InStr(MyAssembly.FullName.ToString, "Excel") <> 0 Then
     
                    MsgBox(MyAssembly.Location.ToString)
                    Dim buffer As Byte() = File.ReadAllBytes(MyAssembly.Location)
                    Dim AppDomain1 = AppDomain.CreateDomain("eee")
                    AppDomain1.Load(MyAssembly.FullName.ToString)
     
                    AppDomain.Unload(AppDomain1)
     
                End If
            Next
     
     
     
     
            For Each MyAssembly As Assembly In AssembliesLoaded
     
                If InStr(MyAssembly.FullName.ToString, "Excel") <> 0 Then
                    MsgBox(MyAssembly.FullName.ToString)
     
                End If
            Next

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je ne comprends pas le sens de ce test... qu'est-ce que c'est censé vérifié ?

    Quand on décharge un AppDomain, ça décharge les assemblies qui sont chargés dedans. Mais si les même assemblies sont chargés aussi dans un autre AppDomain, ils restent chargés dans cet AppDomain...

  5. #5
    Membre averti Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 315
    Points : 345
    Points
    345
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je ne comprends pas le sens de ce test... qu'est-ce que c'est censé vérifié ?

    Quand on décharge un AppDomain, ça décharge les assemblies qui sont chargés dedans. Mais si les même assemblies sont chargés aussi dans un autre AppDomain, ils restent chargés dans cet AppDomain...
    il me sert à vérifier s'il a bien décharger la référence excel.
    Ce qui n'est pas le cas

  6. #6
    Membre averti Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 315
    Points : 345
    Points
    345
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je ne comprends pas le sens de ce test... qu'est-ce que c'est censé vérifié ?

    Quand on décharge un AppDomain, ça décharge les assemblies qui sont chargés dedans. Mais si les même assemblies sont chargés aussi dans un autre AppDomain, ils restent chargés dans cet AppDomain...
    le probleme c'est que si je fais reference au appdomain en cours, ca cree un bug

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par icadedt Voir le message
    il me sert à vérifier s'il a bien décharger la référence excel.
    Oui mais ce test n'est pas probant, puisque tu as initialisé AssembliesLoaded avant de faire le Unload...

    Bon, en fait je vois ce que tu cherches à faire, mais ça ne marchera pas :
    - ton programme démarre avec l'AppDomain X
    - tu charges l'assembly A dans X
    - tu crées un AppDomain Y dans le quel tu charges aussi A
    - tu décharges Y, ce qui décharge en même temps les assemblies qui étaient chargés dedans, mais A est toujours chargé dans X...

    Bref, comme je le disais au début, ON NE PEUT PAS décharger un assembly sans décharger l'AppDomain dans lequel il est chargé. Si tu as absolument besoin de décharger un assembly, arrange toi pour le charger seulement dans un nouvel AppDomain que tu pourras décharger ensuite. Si tu le charges dans l'AppDomain "principal" (celui dans lequel ton application démarre), il sera impossible de le décharger sans arrêter l'application

  8. #8
    Membre averti Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 315
    Points : 345
    Points
    345
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Oui mais ce test n'est pas probant, puisque tu as initialisé AssembliesLoaded avant de faire le Unload...

    Bon, en fait je vois ce que tu cherches à faire, mais ça ne marchera pas :
    - ton programme démarre avec l'AppDomain X
    - tu charges l'assembly A dans X
    - tu crées un AppDomain Y dans le quel tu charges aussi A
    - tu décharges Y, ce qui décharge en même temps les assemblies qui étaient chargés dedans, mais A est toujours chargé dans X...

    Bref, comme je le disais au début, ON NE PEUT PAS décharger un assembly sans décharger l'AppDomain dans lequel il est chargé. Si tu as absolument besoin de décharger un assembly, arrange toi pour le charger seulement dans un nouvel AppDomain que tu pourras décharger ensuite. Si tu le charges dans l'AppDomain "principal" (celui dans lequel ton application démarre), il sera impossible de le décharger sans arrêter l'application
    le probleme c'est que si je decharge manuellement ma reference (excel.exe) , VB exress edition ne voudra pas compiler mon projet !

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je comprends rien à ton histoire
    Excel.exe, ce n'est pas un assembly .NET... si tu veux faire de l'interop avec Excel, ce n'est pas Excel.exe qu'il faut référencer, c'est les PIA (primary interop assemblies)
    cf. la FAQ : http://dotnet.developpez.com/faq/csharp/?page=office

    ou alors c'est moi qui suis bête et qui ai rien compris à ce que tu veux faire

Discussions similaires

  1. [XL-2010] Impossibilité de lister les références
    Par Brunodm13 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/10/2014, 22h42
  2. [XL-2003] lister les références actives de mes classeurs
    Par Henri-gp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/03/2012, 10h39
  3. Lister les fichiers et les dépendances liés à un projet
    Par sovo dans le forum Vos contributions VB6
    Réponses: 19
    Dernier message: 24/10/2007, 22h57
  4. Lister les projets d'une solution
    Par Jérôme Lambert dans le forum EDI/Outils
    Réponses: 4
    Dernier message: 18/07/2007, 00h06
  5. Lister les états d'un projet ADP
    Par hannii dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/03/2007, 15h26

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