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

Framework .NET Discussion :

utilisation des AppDomain


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 103
    Par défaut utilisation des AppDomain
    Voila que je me mets à la création d'AppDomain.

    Cela me permet de charger dynamiquement des dlls qui vont servir un court instant. Une fois la dll utilisée, je decharge ce nouveau domaine créer.


    J'ai lu et suivi les instructions du tuto:
    http://vincentlaine.developpez.com/t...domain/csharp/


    Un seul souci, quand j'essai de charger une dll qui n'est pas dans le repertoire de mon application, j'ai une erreur.

    Dans le tuto, dans la fonction LoadPlugins, le repertoire où se trouve les plugins sont dans: RepertoireAppli\Plugins\

    Si je fais comme ca, ca marche, par contre si mon répertoire d'appli est par exemple: D:\MonAppli\Bin\Debug
    Et que le repertoire de mes plugins est D:\Plugins\

    voici le beau messge d'erreur que j'ai:



    Dans les parametres de la création de domaine, j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
    setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;	
    setup.PrivateBinPath =  "D:\\Plugins\\";
    setup.ApplicationName = "AppliMacro";
    setup.ShadowCopyFiles = "false";
    quelqu'un aurait-il une idée?

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 103
    Par défaut
    Bon toujours, pas de solution.

    Je vais créer un repertoire Plugins dans le repertoire de mon application.
    Je compilerai mes macro sdans ce répertoire ce qui me créera une dll Plugins.dll

    Il faudra que se répertoire soit accessible en écriture chez les clients.

    Et hop c parti.

    C'est un peu embetant d'obliger les client a rendre un repertoire accessible, mais pour l'instant pas d'autre solution.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Salut,

    Si tu regardes la doc concernant la propriété PrivateBinPath d'un appDomain ici, tu noteras :

    Remarks:
    Private assemblies are deployed in the same directory structure as the application. If the directories specified for PrivateBinPath are not under ApplicationBase, they are ignored.
    Donc PrivateBinPath sert uniquement à spécifier des sous répertoires de ApplicationBase. Je ne sais pas s'il y a un moyen de donner un chemin complet qui ne soit pas un sous répertoire de l'appli.

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par Sphax
    Donc PrivateBinPath sert uniquement à spécifier des sous répertoires de ApplicationBase. Je ne sais pas s'il y a un moyen de donner un chemin complet qui ne soit pas un sous répertoire de l'appli.
    +1 tu ne peux pas charger une dll qui n'est pas dans un sous répertoire du dossier de ton app ou qui n'est pas dans le GAC avec PrivateBinPath.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 103
    Par défaut
    Salut tout le monde

    J'ai avancé un peu sur mon probleme.


    D'une pour créer mon domain d'application juste besoin de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
    setup.PrivateBinPath = myDirectoryPlugins;
    setup.ShadowCopyFiles = "false";
     
    _PluginsDomain = AppDomain.CreateDomain("PluginsDomain",null,setup);
    Ensuite dans ce domain je charge la dll de chargement de Dll, AssemblyLoader:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(null != _PluginsDomain)
    {
    	//Creation du Loader
    	string myLocation = GetLoadedAssemblyLocation("AssemblyLoader");
    	_Loader = (Loader)_PluginsDomain.CreateInstanceFromAndUnwrap(myLocation, "AssemblyLoader.Loader");
     
    	//Chargement du fichier dll dans le nouveau domain
    	_Loader.LoadFrom(_OutputFile);
    }
    Dans la dll AssemblyLoader j'utilise LoadFrom et pas un Load tout court, ce qui permet de chargé une dll qui vient de n'importe où.

    Ensuite, il y avait une grosse erreur dans mon plugins.
    je déclarais la class de mon plugins [Serailizable], c'est a cause de cela que j'avais le message d'erreur affiché plus haut.

    Maintenant je déclare ma class MarshalByRefObj.

    CA MARCHE, ouf.
    J'arrive bien a compilé, chargé la dll compilé, executé la dll et déchargé le domain d'application PluginsDomain.


    Ensuite quelques soucis quand je commence a compliqué la macro.
    Dans la macro j'utilise des objets d'un de mes framework ecrit en C++.
    Toutes mes classes que je souhaite utilisé doivent implémenter l'interface MarshalByRefObj. Tout va bien pour les class managé.

    Le souci arrive pour les classes non managées. Je ne sais pas encore comment Marshalisé ces class. De plus j'utilise des dll de code c++ non managé qui n'ont pas été développer par moi. Est ce que je pourrai Marshalisé ces class qd meme.

Discussions similaires

  1. Utilisation des AppDomain
    Par BouB dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 25/11/2008, 13h13
  2. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24
  3. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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