Voici une méthode simplifiée qui charge une librairie/module:
public void LoadModule(string pModulePath)
{
if (Path.GetExtension(pModulePath) == ".dll")
{
Assembly module = Assembly.LoadFrom(pModulePath);
foreach (Type moduleType in module.GetTypes())
{
if (moduleType.IsPublic)
{
if (!moduleType.IsAbstract)
{
Type interfaceType =
moduleType.GetInterface("IModule", true);
if (interfaceType != null)
{
IModule moduleToLoad =
Bien, si j'appelle cette méthode avec 2 dll différentes, l'objet
'module' est toujours le même, c'est-à-dire, le premier créé lors du
premier appel... je comprends plus rien, j'ai besoin d'explications.
Voici une méthode simplifiée qui charge une librairie/module:
[...]
Assembly module = Assembly.LoadFrom(pModulePath);
Bien, si j'appelle cette méthode avec 2 dll différentes, l'objet 'module' est toujours le même, c'est-à-dire, le premier créé lors du premier appel... je comprends plus rien, j'ai besoin d'explications.
C'est exactement le comportement spécifié dans l'aide en ligne ! Je t'invite à examiner et tester dans le détail les trois méthodes Load, LoadFrom et LoadFile. Je pense que le load serait plus approprié dans ton cas (?)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
dans : news:mn.44b67d6a4ce899ee.62466@wanadoo.fr,
Delf écrivait :
Bonsoir, je deviens taré !
Voici une méthode simplifiée qui charge une librairie/module:
[...]
Assembly module = Assembly.LoadFrom(pModulePath);
Bien, si j'appelle cette méthode avec 2 dll différentes, l'objet
'module' est toujours le même, c'est-à-dire, le premier créé lors du
premier appel... je comprends plus rien, j'ai besoin d'explications.
C'est exactement le comportement spécifié dans l'aide en ligne !
Je t'invite à examiner et tester dans le détail les trois méthodes Load,
LoadFrom et LoadFile.
Je pense que le load serait plus approprié dans ton cas (?)
Voici une méthode simplifiée qui charge une librairie/module:
[...]
Assembly module = Assembly.LoadFrom(pModulePath);
Bien, si j'appelle cette méthode avec 2 dll différentes, l'objet 'module' est toujours le même, c'est-à-dire, le premier créé lors du premier appel... je comprends plus rien, j'ai besoin d'explications.
C'est exactement le comportement spécifié dans l'aide en ligne ! Je t'invite à examiner et tester dans le détail les trois méthodes Load, LoadFrom et LoadFile. Je pense que le load serait plus approprié dans ton cas (?)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Delf
Fred a formulé la demande :
Je pense que le load serait plus approprié dans ton cas (?)
.Load() ne permet pas de charger une DLL via son path apparemment.
-- Delf
Fred a formulé la demande :
Je pense que le load serait plus approprié dans ton cas (?)
.Load() ne permet pas de charger une DLL via son path apparemment.
J'ajouterai que tu risques d'avoir des soucis avec les fichiers satellites comme les fichiers ressources avec LoadFrom ou LoadFile (à revérifier, je ne me souviens plus exactement).
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
dans : news:mn.44de7d6aaf4f1647.62466@wanadoo.fr,
Delf écrivait :
Fred a formulé la demande :
Je pense que le load serait plus approprié dans ton cas (?)
.Load() ne permet pas de charger une DLL via son path apparemment.
J'ajouterai que tu risques d'avoir des soucis avec les fichiers
satellites comme les fichiers ressources avec LoadFrom ou LoadFile (à
revérifier, je ne me souviens plus exactement).
J'ajouterai que tu risques d'avoir des soucis avec les fichiers satellites comme les fichiers ressources avec LoadFrom ou LoadFile (à revérifier, je ne me souviens plus exactement).
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Fred
dans : news:, Delf écrivait :
Fred a exprimé avec précision :
C'est exactement le comportement spécifié dans l'aide en ligne !
Pourrais-tu me fournir le lien exact s'il te plait ? Merci.
Je parle de la MSDN library (excuse-moi pour le lapsus «aide en ligne»). Mais tu peux trouver l'équivalent ici : http://msdn2.microsoft.com/en-us/library/1009fa28.aspx
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
dans : news:mn.45097d6a1203443c.62466@wanadoo.fr,
Delf écrivait :
Fred a exprimé avec précision :
C'est exactement le comportement spécifié dans l'aide en ligne !
Pourrais-tu me fournir le lien exact s'il te plait ?
Merci.
Je parle de la MSDN library (excuse-moi pour le lapsus «aide en ligne»).
Mais tu peux trouver l'équivalent ici :
http://msdn2.microsoft.com/en-us/library/1009fa28.aspx
C'est exactement le comportement spécifié dans l'aide en ligne !
Pourrais-tu me fournir le lien exact s'il te plait ? Merci.
Je parle de la MSDN library (excuse-moi pour le lapsus «aide en ligne»). Mais tu peux trouver l'équivalent ici : http://msdn2.microsoft.com/en-us/library/1009fa28.aspx
Je charge 2 modules avec 2 paths différents, le premier est chargé et lors du chargement du second, exception: "... has already loaded from a different location..."
Je ne comprends pas pourquoi il ne fait pas de distinction ? Qu'est-ce-qui fait que je ne puissse pas charger mes deux modules ? Ou alors avec la première méthode, il me créer une assembly similaire...
Je charge 2 modules avec 2 paths différents, le premier est chargé et
lors du chargement du second, exception: "... has already loaded from a
different location..."
Je ne comprends pas pourquoi il ne fait pas de distinction ?
Qu'est-ce-qui fait que je ne puissse pas charger mes deux modules ? Ou
alors avec la première méthode, il me créer une assembly similaire...
Je charge 2 modules avec 2 paths différents, le premier est chargé et lors du chargement du second, exception: "... has already loaded from a different location..."
Je ne comprends pas pourquoi il ne fait pas de distinction ? Qu'est-ce-qui fait que je ne puissse pas charger mes deux modules ? Ou alors avec la première méthode, il me créer une assembly similaire...
Merci
-- Delf
Delf
Delf a présenté l'énoncé suivant :
[...]
De la magie, problème résolu. Je sais pas comment par contre :
-- Delf
Delf a présenté l'énoncé suivant :
[...]
De la magie, problème résolu. Je sais pas comment par contre :
De la magie, problème résolu. Je sais pas comment par contre :
J'ai rien touché et que voilà, il recommence à loader toujours le même module...
-- Delf
Delf
Delf a couché sur son écran :
J'ai rien touché et que voilà, il recommence à loader toujours le même module...
J'ai trouvé la source du problème : dans les propriétés de l'assembly, les modules avaient le même nom d'assemblage... et vu que je générer des modules fictifs depuis le même projet, forcément, même noms d'assemblage.
-- Delf
Delf a couché sur son écran :
J'ai rien touché et que voilà, il recommence à loader toujours le même
module...
J'ai trouvé la source du problème : dans les propriétés de l'assembly,
les modules avaient le même nom d'assemblage... et vu que je générer
des modules fictifs depuis le même projet, forcément, même noms
d'assemblage.
J'ai rien touché et que voilà, il recommence à loader toujours le même module...
J'ai trouvé la source du problème : dans les propriétés de l'assembly, les modules avaient le même nom d'assemblage... et vu que je générer des modules fictifs depuis le même projet, forcément, même noms d'assemblage.
-- Delf
Delf
Delf avait écrit le 13/10/2006 :
J'ai trouvé la source du problème : dans les propriétés de l'assembly, les modules avaient le même nom d'assemblage... et vu que je générer des modules fictifs depuis le même projet, forcément, même noms d'assemblage.
Bordel...
Je fais un contrôle personnalisé pour afficher dans une WinForm les informations concernant les modules, je reprends le même code, ça plante.
L'Activator.CreateInstance() me retourne bien un objet de type CModuleTest (module de Test).
CModTest étends une interface IModule.
Impossible de caster cet objet en IModule, alors que je n'ai pas de problème avec mon service Windows.
// Juste là, tout est bon, objTemp est de type ModTest.CModuleTest
IModule module = (IModule)objTemp;
Et là, exception:
"Unable to cast object of type 'ModTest.CModuleTest' to type 'X.Y.IModule'."
Pourquoi ? Je tiens à répéter que j'utilise le même code avec un service Windows et que ça fonctionne.
Merci pour toute suggestion.
-- Delf
Delf avait écrit le 13/10/2006 :
J'ai trouvé la source du problème : dans les propriétés de l'assembly, les
modules avaient le même nom d'assemblage... et vu que je générer des modules
fictifs depuis le même projet, forcément, même noms d'assemblage.
Bordel...
Je fais un contrôle personnalisé pour afficher dans une WinForm les
informations concernant les modules, je reprends le même code, ça
plante.
L'Activator.CreateInstance() me retourne bien un objet de type
CModuleTest (module de Test).
CModTest étends une interface IModule.
Impossible de caster cet objet en IModule, alors que je n'ai pas de
problème avec mon service Windows.
J'ai trouvé la source du problème : dans les propriétés de l'assembly, les modules avaient le même nom d'assemblage... et vu que je générer des modules fictifs depuis le même projet, forcément, même noms d'assemblage.
Bordel...
Je fais un contrôle personnalisé pour afficher dans une WinForm les informations concernant les modules, je reprends le même code, ça plante.
L'Activator.CreateInstance() me retourne bien un objet de type CModuleTest (module de Test).
CModTest étends une interface IModule.
Impossible de caster cet objet en IModule, alors que je n'ai pas de problème avec mon service Windows.