2009-02-05 9 views
0

Étant donné une DLL .NET constituée d'une classe "Place" et d'une fonction "Où" renvoyant un entier; J'ai besoin de charger la DLL dans un domaine d'application, d'exécuter la fonction et de décharger le domaine d'application.Exécution d'une fonction dans un domaine d'application


Dim domain As AppDomain = AppDomain.CreateDomain("Executor")    
Dim buffer() As Byte = IO.File.ReadAllBytes("c:\path\Locator.dll") 
Dim asy As Assembly = domain.Load(buffer) 
Dim obj As [Object] = asy.CreateInstance("Locator.Place") 
Dim method As MethodInfo = obj.GetType.GetMethod("Where") 
Dim result as Integer = method.Invoke(obj, New [Object]() { 1 }) 
AppDomain.Unload(domain) 

Cette ligne échoue:


Dim asy As Assembly = domain.Load(buffer) 

Avec ce message d'erreur:


'Could not load file or assembly 'Place, Version=1.0.0.0, Culture=neutral, PublicKeyToken-null' or one of it's dependencies. The System Cannot find the specified file.' 

Le fichier est dans le tampon, donc je devine que c'est une .dll dépendance. Cependant, il devrait trouver ceux dans le répertoire du programme de base.

Des idées sur la cause de l'erreur?

N'importe quel exemple de code testé pour charger un assembly dans un AppDomain, Exiger une fonction, puis décharger le AppDomain serait apprécié.

(BTW, j'ai googlé et n'ont pas trouvé de utiles échantillons.)

Répondre

0

Si vous voulez savoir ce que la dépendance ne pouvait pas être chargé, essayez d'utiliser fuslogvw. Vérifiez http://msdn.microsoft.com/en-us/library/e74a18c4(VS.71).aspx

J'ai trouvé l'explication sur link text plutôt bonne. Il illustre certains pièges et fournit un exemple de code qui devrait être facilement traduit en VB.NET.

J'espère que cela aide.

1

Vous avez raison de dire que l'erreur est due à une référence manquante. La référence la plus probable ne peut pas être résolue en raison de la manière dont vous chargez l'assemblage. Puisque vous chargez à partir d'un tableau Byte, l'Assembly.Location ne pointera pas vers l'emplacement de la DLL. Étant donné que la DLL que vous faites référence n'est pas dans le GAC, elle ne pourra pas trouver l'assembly référencé. Essayez de charger l'assembly directement à partir du fichier et de ne pas le charger dans un tableau d'octets en premier.