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 :

Chargement des Assembly dans un domain personnalisé


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut Chargement des Assembly dans un domain personnalisé
    Re-Hello Folks,

    Cette fois j'aurais besoin de votre aide pour pouvoir charger des Assemblys dans un Domain spécifique, ceci dans le but de décharger les Assemblys à ma convenance.

    Donc dans un premier temps, j'initialise mon domain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                AppDomainSetup appDomainSetup = new AppDomainSetup( );
                appDomainSetup.ShadowCopyFiles = "true";
                appDomainSetup.ApplicationBase = path; ;
                domain = AppDomain.CreateDomain("SoaDomain", null, appDomainSetup);
    - path désignant le chemin de mon projet ;

    Avant de charger mes assemblys :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        c = this.domain.Load(f.FullName);
    - f.FullName désignant le chemin complet du fichier de mon Assembly ;

    Malheureusement, le chargement ne fonctionne pas, et me retourne une exception FileLoadException avec le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Could not load file or assembly 'C:\\Documents and Settings\\Nicolas\\My Documents\\Visual Studio 2008\\Projects\\YkeProject1\\YkeProject1\\bin\\Debug\\YkeProject1.dll' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)
    Une idée pour me sortir de là ? Est-ce que j'aurais d'autres paramètres à mettre dans mon AppDomainSetup ?

    Merci d'avance !


    [Edit] : J'ai du mieux en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c = this.domain.Load(AssemblyName.GetAssemblyName(f.FullName));
    J'obtiens cette le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Could not load file or assembly 'YkeProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
    je suis toujours ouvert à toutes suggestions !

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Selon mon souvenir, il y avait un LoadFrom qui te permettait de spécifier un chemin et non pas un nom d'assembly.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Le LoadFrom fonctionne dans le cas où tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly a = Assembly.LoadFrom(filepath);
    Ce qui ne me convient pas puisque l'Assembly est chargée dans le domain général et non dans un domain personnalisé.

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pour tester, tu charges ton assembly avec LoadFrom dans une assembly tempAssembly, ensuite, tu appelles Load de ton appdomain en lui passant tempAssembly.FullName, et tu vois si ça marche. Au moins, ça te donnera des pistes.

    EDIT : tu peux aussi tester ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AppDomain ad = AppDomain.CreateDomain("ChildDomain");
    ad.Load("MyAssembly"); // Nom de ton assembly sans l'extension
    en vérifiant que la propriété BaseDirectory ou ApplicationBase de ton AppDomainSetup pointe bien vers le répertoire qui contient ton assembly.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    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
    je vais peut être dire une bêtise mais il me semble avoir lu qd je m'intéressais aux appDomain que appDomain.Load ne devais être appelé que depuis le domaine dans lequel on souhaite charger l'assembly, c'est à dire depuis AppDomain.CurrentDomain. Sans ça l'assembly était aussi chargée dans l'appDomain courant ce qui est rarement ce qu'on souhaite faire et ce qui cause peut être ton exception, car l'assembly ne se trouverait pas dans le répertoire appBase de l'appDomain courant... J'espère que je suis clair

    EDIT: une petite recherche google et on tombe sur ça ou encore ça.

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Arf, je suis perdu.

    Comment faire alors pour que je puisse acceder à mon assembly, obtenir les informations que je cherche à l'intérieur, puis la libérer ?

Discussions similaires

  1. SDL Chargement des BMP dans la memoire RAM ?
    Par CLion dans le forum SDL
    Réponses: 11
    Dernier message: 03/05/2008, 02h46
  2. [MySQL] chargement des données dans un formulaire
    Par super-java dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/04/2008, 12h49
  3. Chargement des DLL dans le code C++
    Par Triste dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2008, 09h29
  4. probleme de chargement des extensions dans une dll
    Par Syl_20 dans le forum OpenGL
    Réponses: 3
    Dernier message: 03/07/2007, 08h37
  5. chargement des images dans une table
    Par sandy07 dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/04/2007, 09h37

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