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

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 17
    Points
    17
    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
    Points : 6 334
    Points
    6 334
    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 à l'essai
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 17
    Points
    17
    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
    Points : 6 334
    Points
    6 334
    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 éprouvé
    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
    Points : 1 046
    Points
    1 046
    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 à l'essai
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 17
    Points
    17
    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 ?

  7. #7
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Bah dans ce cas, tu fais un ReflectionOnlyLoad dans ton appdomain principal et tu l'unload après utilisation.
    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

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    J'unload le appdomain principal ?

    [Edit] : Damned, pas de methode "ReflectionOnlyLoadFrom" pour "AppDomain.CurrentDomain" ! Comment dois-je l'appeler ?

  9. #9
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par kurtisnotdead Voir le message
    J'unload le appdomain principal ?
    Non l'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

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Mais comment faire ? Mon problème est que justement, les Assembly en elle même ne peuvent pas être unloaded !

    Au passage, je te remercie de tes efforts et de ta patience

    [Edit] : D'oh, mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                        c = Assembly.ReflectionOnlyLoadFrom(f.FullName);
                        Type[] types = (c.GetTypes());
    Me lance une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot resolve dependency to assembly 'Yke.Services.Patterns, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.":"Yke.Services.Patterns, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"}	System.Exception {System.IO.FileLoadException}
    Sur le GetTypes() !

  11. #11
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Au temps pour moi

    Voila ce que j'ai fait et qui fonctionne :
    Code csharp : 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
     
            static void Main(string[] args)
            {
                Console.WriteLine("Creating AppDomainSetup...");
                AppDomainSetup myDomainSetup = new AppDomainSetup();
                myDomainSetup.ShadowCopyFiles = "true";
     
                Console.WriteLine("Loading Assembly from file...");
                Assembly myAssembly = Assembly.LoadFrom(@"C:\fullpath\Microsoft.ApplicationBlocks.ExceptionManagement.dll");
     
                Console.WriteLine("Creating AppDomain...");
                AppDomain myDomain = AppDomain.CreateDomain("MyDomain", null, myDomainSetup);
     
                Console.WriteLine("Loading Assembly into AppDomain...");
                myDomain.Load(myAssembly.FullName);
     
                Console.WriteLine("AppDomain '" + myDomain.FriendlyName + "' contains :");
                myDomain.GetAssemblies().ToList<Assembly>().ForEach(a => Console.WriteLine(a.GetName().FullName));
     
                Console.WriteLine("Unloading AppDomain...");
                AppDomain.Unload(myDomain);
     
     
                Console.WriteLine("Press <Enter> to continue...");
                Console.ReadLine();
            }
    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

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly myAssembly = Assembly.LoadFrom(@"C:\fullpath\Microsoft.ApplicationBlocks.ExceptionManagement.dll");
    Cette ligne va charger la dll dans le domaine courant, non ?

  13. #13
    Membre éprouvé
    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
    Points : 1 046
    Points
    1 046
    Par défaut
    Citation Envoyé par kurtisnotdead Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly myAssembly = Assembly.LoadFrom(@"C:\fullpath\Microsoft.ApplicationBlocks.ExceptionManagement.dll");
    Cette ligne va charger la dll dans le domaine courant, non ?
    Oui c'est le sens de mon message plus haut. Avec ça tu charges l'assembly dans le domaine courant, pour t'en assurer il suffit de lister les assemblies de ce domaine... Au final on obtient pas du tout l'effet voulu .

  14. #14
    Membre éprouvé
    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
    Points : 1 046
    Points
    1 046
    Par défaut
    Citation Envoyé par kurtisnotdead Voir le message
    Mais comment faire ? Mon problème est que justement, les Assembly en elle même ne peuvent pas être unloaded !

    Au passage, je te remercie de tes efforts et de ta patience

    [Edit] : D'oh, mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                        c = Assembly.ReflectionOnlyLoadFrom(f.FullName);
                        Type[] types = (c.GetTypes());
    Me lance une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot resolve dependency to assembly 'Yke.Services.Patterns, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.":"Yke.Services.Patterns, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"}	System.Exception {System.IO.FileLoadException}
    Sur le GetTypes() !
    Comme le dit la doc sur la méthode ReflectionOnlyLoad:

    Les dépendances ne sont pas chargées automatiquement dans le contexte de réflexion uniquement.
    Et comme le dit ton exception, il faut soit précharger les assemblies dont dépend l'assembly qui t'interesse par la même méthode, soit t'abonner à un évènement ReflectionOnlyAssemblyResolve qui sera appelé lorsque ".net" voudra des infos sur un type qui n'est pas présent dans ton assembly mais dans une de ses dépendances. A ce moment là il te suffira de refaire un
    ReflectionOnlyLoad pour charger cette assembly uniquement pour faire de la reflexion.

  15. #15
    Membre éprouvé
    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
    Points : 1 046
    Points
    1 046
    Par défaut
    Décidemment c'est presque du spam là . Mais pour répondre clairement au problème:

    Si tu veux simplement inspecter une assembly sans la charger alors tu peux passer par Assembly.ReflectionOnlyLoad depuis ton appDomain courant, l'assembly ne sera pas chargée pour être exécutée.

    Si tu veux charger une assembly et instancier ses types, exécuter ses méthodes, puis plus tard décharger l'assembly alors il faut passer par un autre appDomain. Mais comme dit plus haut il faut créer un nouvel appDomain et charger l'assembly depuis celui-ci ! Sinon l'assembly est aussi chargée dans le domaine "appelant". Une solution: créer une petite assembly qui contiendra un type avec une méthode pour charger une assembly. Cette petite assembly sera chargée dans tous les appDomain et te servira de "pont" pour charger d'autres assemblies dans ton domaine, ça donne:
    1) créer un appDomain
    2) charger dans ce domaine avec un Assembly.Load ton assembly "pont", appelons la BridgeAssembly
    3) créer un objet Bridge dans le nouveau domaine
    4) appeler Bridge.LoadAssembly(nom de l'assembly)
    5) En général ta classe Bridge se chargera aussi d'exécuter du code de l'assembly temporaire, sinon tout ça ne servirait à rien.

    Je crois qu'il y a aussi une autre solution avec une histoire de appDomainManager mais je maîtrise pas trop.

    EDIT: petite précision, je pense que la classe Bridge doit hériter de MarshalByRefObject, pour que l'objet Bridge vive réellement dans le nouvel appDomain.

  16. #16
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Bon alors j'ai trouvé.
    Voici la dernière version du code :
    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
    33
    34
    35
    36
    37
    static void Main(string[] args)
    {
        Console.WriteLine("Creating AppDomainSetup...");
        AppDomainSetup myDomainSetup = new AppDomainSetup();
        myDomainSetup.ShadowCopyFiles = "true";
     
        Console.WriteLine("Loading Assembly from file...");
        AssemblyName name = new AssemblyName();
        name.Name = "Microsoft.ApplicationBlocks.ExceptionManagement";
        name.CodeBase = @"C:\Users\...\Binaries\Microsoft.ApplicationBlocks.ExceptionManagement.dll";
        name.
     
        Console.WriteLine("Creating AppDomain...");
        AppDomain myDomain = AppDomain.CreateDomain("MyDomain", AppDomain.CurrentDomain.Evidence, myDomainSetup);
     
        Console.WriteLine("Loading Assembly into AppDomain...");
        myDomain.Load(name);
     
        Console.WriteLine("AppDomain '" + myDomain.FriendlyName + "' contains :");
        myDomain.GetAssemblies().ToList<Assembly>().ForEach(a => Console.WriteLine(a.GetName().Name));
     
        Console.WriteLine();
        Console.WriteLine("AppDomain '" + AppDomain.CurrentDomain.FriendlyName + "' contains :");
        AppDomain.CurrentDomain.GetAssemblies().ToList<Assembly>().ForEach(a => Console.WriteLine(a.GetName().Name));
     
        Console.WriteLine();
        Console.WriteLine("Unloading AppDomain...");
        AppDomain.Unload(myDomain);
     
        Console.WriteLine();
        Console.WriteLine("AppDomain '" + AppDomain.CurrentDomain.FriendlyName + "' contains :");
        AppDomain.CurrentDomain.GetAssemblies().ToList<Assembly>().ForEach(a => Console.WriteLine(a.GetName().Name));
     
        Console.WriteLine();
        Console.WriteLine("Press <Enter> to continue...");
        Console.ReadLine();
    }
    Ceci charge l'assembly dans le domaine myAssembly ET dans le domain courant. C'est le fonctionnement standard de la méthode Load.
    Voici l'explication (from MSDN) :
    The assembly is loaded into both domains because Assembly does not derive from MarshalByRefObject, and therefore the return value of the Load method cannot be marshaled. Instead, the common language runtime tries to load the assembly into the calling application domain. The assemblies that are loaded into the two application domains might be different if the path settings for the two application domains are different.
    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

  17. #17
    Membre éprouvé
    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
    Points : 1 046
    Points
    1 046
    Par défaut
    C'est le fonctionnement standard et cette méthode n'a aucun intérêt puisqu'au final ton assembly se retrouve dans ton domaine courant et que tu ne pourras pas la décharger de celui-ci. Le seul moyen est de charger l'assembly directement depuis le nouveau domaine.

  18. #18
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par Sphax Voir le message
    Le seul moyen est de charger l'assembly directement depuis le nouveau domaine.
    C'est ce que fais mon code, non ? Sinon qu'est ce que tu entends par là ?
    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

  19. #19
    Membre éprouvé
    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
    Points : 1 046
    Points
    1 046
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    C'est ce que fais mon code, non ? Sinon qu'est ce que tu entends par là ?
    Non ton code charge dans un second appDomain une assembly depuis le domaine par défaut. Ce que je veux dire par "depuis un domaine" c'est que la méthode load doit être appelée par un objet qui vit déja dans le domaine voulu. Dans ton code c'est la fonction Main de l'assembly chargée dans le domaine par défaut qui appelle la méthode Load. Pour comprendre une des marches à suivre regarde mes messages précédents (fin de l apage 1 de ce sujet...).

  20. #20
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par Sphax Voir le message
    Non ton code charge dans un second appDomain une assembly depuis le domaine par défaut. Ce que je veux dire par "depuis un domaine" c'est que la méthode load doit être appelée par un objet qui vit déja dans le domaine voulu. Dans ton code c'est la fonction Main de l'assembly chargée dans le domaine par défaut qui appelle la méthode Load. Pour comprendre une des marches à suivre regarde mes messages précédents (fin de l apage 1 de ce sujet...).
    Dis comme ça, c'est beaucoup plus clair effectivement. Je soupçonnais aussi qu'il fallait une méthode comme tu la décris maintenant pour arriver au résultat escompté.
    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

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