Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Décharger une Dll [ Système / Exécution ] (M5i9k)

dimanche 27 mai 2007 à 16:22:13 | Décharger une Dll

M5i9k

Bonjour à tous,

je voudrais creer une application qui puisse charger un assembly et le décharger pour permettre de le mettre à jour puis de le recharger.
J'ai essayé de la manière suivante :

            Assembly a = Assembly.LoadFrom("test.dll");
            Type t = a.GetType("ActionsDll.Actions");
            object target = Activator.CreateInstance(t);
            string ret = (string)t.InvokeMember("Execute",BindingFlags.InvokeMethod,null, target, new object[]{"msgBox"});

pour charger un assembly comntenu dans test.dll qui contient une fonction Execute. Pendant l'execution du programme, je ne peux plus supprimer la dll. Je voudrais donc la décharger mais je ne trouve pas comment faire sauf en utilisant AppDomain mais je trouve cela trop compliqué pour ce que je veux faire :

AppDomain n = AppDomain.CreateDomain("test");
object target = n.CreateInstanceAndUnwrap("test.dll","ActionsDll.Actions");
...

N'y à t'il pas moyen de décharger un assembly qui à été charger dans l'AppDomain courant???

merci de vos réponse

dimanche 27 mai 2007 à 16:35:06 | Re : Décharger une Dll

coq

Administrateur CodeS-SourceS

Salut,

Non, il n'est vraiment pas possible de décharger un assembly du domaine d'application courant.



/*
coq
MVP Visual C#
CoqBlog
*/


dimanche 27 mai 2007 à 16:55:34 | Re : Décharger une Dll

coq

Administrateur CodeS-SourceS
Et un peu de lecture, si tu veux approfondir le sujet :-) : Jason Zander's WebLog : Why isn't there an Assembly.Unload method?



/*
coq
MVP Visual C#
CoqBlog
*/

dimanche 27 mai 2007 à 17:26:39 | Re : Décharger une Dll

M5i9k

Ok je te remercie pour la réponse et le lien, je dois donc utiliser un AppDomain mais je n'arrive pas à suivre les étapes, peux tu me donner un bout de code que je puisse reprendre?

1) Je créé un AppDomain :
AppDomain a = AppDomain.CreateDomain("test");

2) Je charge l'assembly dans ce nouveau AppDomain (test.dll)

3) J'appelle la fonction Execute de l'assembly (string ActionsDll.Execute(string))

4) Je décharge l'assembly

Peux tu me montrer comment faire le plus simple possible car dans les exemples que j'ai vus, il faut creer une classe qui contient un arrayList d'assembly et je ne comprends pas le fonctionnement, je n'ai besoin que d'un assembly.
Merci d"avance.

dimanche 27 mai 2007 à 22:09:07 | Re : Décharger une Dll

M5i9k

Voici le code que j'essaye de faire fonctionner mais qui ne fonctionne pas :

AppDomain n = AppDomain.CreateDomain("test");
Assembly a = n.Load("ActionsDll");
Type t = a.GetType("ActionsDll.Actions");
object target = n.CreateInstance("ActionsDll","ActionsDll.Actions");

j'ai renommé test.dll en ActionsDll.dll qui est son nom à la compilation.

dimanche 3 juin 2007 à 00:00:34 | Re : Décharger une Dll

coq

Administrateur CodeS-SourceS
Salut,

Comme le dit la doc, le problème est que, la classe Assembly n'héritant pas de MarshalByRefObject, la méthode AppDomain.Load ne doit pas être utilisée pour charger un assembly dans un autre domaine d'application que celui courant.
Tu peux passer pour un "loader" similaire à ce que j'ai fait dans cette source là par exemple : http://www.csharpfr.com/codes/PORTEE-VALEUR-CHAMP-STATIC_41444.aspx


/*
coq
MVP Visual C#
CoqBlog
*/

dimanche 3 juin 2007 à 00:01:39 | Re : Décharger une Dll

coq

Administrateur CodeS-SourceS
"Tu peux passer pour un"
Je voulais bien entendu dire
"Tu peux passer par un"




/*
coq
MVP Visual C#
CoqBlog
*/

lundi 4 juin 2007 à 21:54:51 | Re : Décharger une Dll

M5i9k

Je te remercie pour tes réponses et ta source coq je regarde cela.




Cette discussion est classé dans : test, dll, assembly, décharger, appdomain


Répondre à ce message

Sujets en rapport avec ce message

ressources qu'est ce qui est le mieux ? [ par revlis ] en c# .net, j'ai mis des fichiers (wav et ico) dans une dll a part. et dans ma class principal, je recupère l'assemblySystem.Reflection.Assembly ress C# : Comment decharger un DLL par David LARDY [ par microdav ] Bonjour,Dans mon prog en C# je charge plusieurs DLL dynamiquement puis les utilise tres bien de la façon suivante :>using System.Reflection ; >Assembl Création dll N° assembly... [ par Syruis ] Bonjour, je me suis mis au C# pour faire une dll qui devrait me servir en ASP. Donc pour l'integrer a l'asp 'Appel ASP il faut importer le dll .. r Nant et les versions de dll / assembly [ par code05 ] Salut ! Disons que que j'ai une dll de nom : assembly.dllJ'aimerais à l'aide de l'outil Nant (dans le fichier xml) récupérer la version de cette dll.J L'assembly référencé 'Interop.DAO.dll' n'a pas un nom fort [ par ArnaudFabry ] Bonjour,Je programme un service web en VB.NET.Il y a quelques mois le source marchait. Maintenant je voudrais le modifier seulement j'ai l'erreur suiv DLLImport Au Secours !!!!!!! [ par blueangel ] Bonjour tout le monde ,Voila je veux créer une DLL en c# le pb c'est que cette dll fait référence à une autre DLL ecrite en c++pour tester le programm Importer DLL VB dans du C# [ par blat ] Hello :)Tout d'abord je tiens à m'excuser au cas où ma question ne serait pas posée au bon endroit, j'ai pas trouvé où la mettre...Voila mon problème. Erreur de configuration [ par pma3d ] Bonjour à tous. Voilà, pour ceux qui suivent mes posts, mon projet avance. Je pensais en avoir terminé avec les difficultés, mais hier, j'ai encore e Problème au déploiement d'un site avec une DLL [ par tanginthemiddle ] Bonjour,J'ai fait une petit DLL de test en VB6. Celle-ci renvoie simplement une chaîne de caractère.Mon site ASP.net  fais juste un appel à cette DLL


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.