Bonjour ,
J'ai un programme qui utilise une DLL externe (d'un autre projet) en référence.
je cherche une méthode pour décharger ma DLL et la recharger depuis mon programme ?
merci pour vos réponses
Version imprimable
Bonjour ,
J'ai un programme qui utilise une DLL externe (d'un autre projet) en référence.
je cherche une méthode pour décharger ma DLL et la recharger depuis mon programme ?
merci pour vos réponses
Une fois qu'un assembly est chargé dans un domaine d'application (AppDomain), le seul moyen de le déchargé est de décharger l'AppDomain lui-même. Donc si tu as chargé cette DLL directement dans l'AppDomain principal de ton appli, le seul moyen est de redémarrer l'application...
Après, tu peux créer un nouvel AppDomain et charger ta DLL dedans, mais c'est nettement plus compliqué, parce que tu ne peux plus manipuler la DLL directement depuis l'AppDomain principal ; tout doit se faire via des appels cross-AppDomain, et c'est vraiment galère... Les systèmes de plugin utilisent souvent ce genre de chose, pour isoler le plugin et pouvoir le décharger séparément.
Merci finalement j'ai opté pour une solution comme plus simple :
charger dans un autre assambly
et ça marche même si les types de ma dll ne sont pas reconnu dans l'application mais j'ai trouvé une méthode pour dépasser ça.Code:
1
2
3
4
5
6
7 byte[] bytes = System.IO.File.ReadAllBytes("ClassConfig2.Dll"); Assembly a = Assembly.Load(bytes); // Get the type to use. Type myType = a.GetType("ClassConfig.ClassConfig"); // Create an instance. object obj = Activator.CreateInstance(myType);
Merci
Bah là tu charges quand même l'assembly en mémoire, et tu ne peux pas le décharger... En fait, si je comprends bien, ta question était plutôt "comment ne pas verrouiller le fichier dll"
Mon besoin c'est :
comment je peux modifier une dll charger par mon application (self update).
Car cette DLL est compile par mon application.
au premier temps j'ai ma dll de base qui contient une classe de données.
et par la suite si ces données sont changées, de générer une autre dll avec les nouvelles données et décharger l'ancienne dll et charger la nouvelle.
Avec cette méthode ca ne va pas marché mais vu que ma dll contient une seule classe j ai créé une autre classe qui la même structure et j ai utilisé la réflexion pour copier les données.
déjà la chargement de la dll avec cette méthode ne permet pas mon application de connaitre les types et les instancier simplement
Attends, mais ta DLL, elle contient juste une classe qui contient des données ? Quel est l'intérêt de faire une DLL alors ? Tu ne peux pas simplement utiliser un fichier de données ? Ça me semble bizarre ton histoire...
Oui. En faite je ne developpe pas pour un besoin professionnel.
le but est de recuperer les données de config et les charger dans une dll pour les protéger pour ne pas être changer par les utilisateurs dans les futurs utilisation. Je sais qu il existe plusieurs methodes simples mais je veux juste m amuser :lol:
Oui . Et c est le but :mrgreen: