2010-12-14 97 views
0

Visual Studio 2008 - cadre 3.5 - Visual Basicétrange problème avec la réflexion et la méthode statique

Hi! J'ai un problème avec une méthode statique invoquée par réflexion. Lors du chargement de mon win-wpf, je crée une copie de "A4Library.dll" avec le nom "_temp.dll", dans le même répertoire que l'original. Puis, sur un événement bouton-clic, j'invoque une méthode statique sur la _temp.dll de cette façon:

Dim AssemblyFileName As String = Directory.GetCurrentDirectory() & "\_temp.dll" 
Dim oAssembly As Assembly = Assembly.LoadFrom(AssemblyFileName) 
Dim TypeName As String = "MyLibrary.MyService" 
Dim t As Type = oAssembly.GetType(TypeName) 
Dim mi As MethodInfo = t.GetMethod("MyMethod", BindingFlags.Static AndAlso BindingFlags.Public) 
Dim bResponse As Boolean = mi.Invoke(Nothing, New Object() {MyPar1, MyPar2}) 

Mais cela ne fonctionne bien que si je le fichier .exe est pas dans le même répertoire du fichiers .dll, sinon j'obtenir cette erreur (traduit):

InnerException { "Cast impossible [A] MyType sur [B] MyType le type A est originaire de ... dans le contexte 'défaut' dans le. position 'F: \ MyPath \ A4Library.dll' Le type B provient de ... dans le contexte 'LoadFrom' dans la position 'F: \ MyPath_temp.dll'. "}

C'est étrange: il semble à être un conflit avec la même méthode dans le fichier .dll d'origine, mais je ne peux pas comprendre pourquoi il regarde l'original et pas à la copie. Si le fichier .exe relatif à l'assembly principal est placé dans un autre répertoire, tout fonctionne bien.

Je neet avoir le .exe dans le même dossier du fichier .dll, comment puis-je résoudre le problème?

Merci! Pourquoi créer une copie de l'assemblage avant d'exécuter la méthode statique? Pileggi

Répondre

1

Pourquoi créer une copie de l'assemblage avant d'exécuter la méthode statique? Si la création d'une copie est nécessaire, chargez cet assemblage dans un autre AppDomain et exécutez la méthode ici.

+0

Merci beaucoup! J'ai besoin de faire cela parce que parfois j'ai besoin de remplacer le fichier .dll et je pense qu'il est assez difficile de décharger l'exécution d'un assemblage déjà chargé. – lamarmora