2010-08-05 5 views
-1

chargé dynamiquement Le code ci-dessous que je suis en train de charger un DLL dynamiquement ne fonctionne pas.ombre AppDomain copie - Chargement/Déchargement une dll

AppDomain appDomain = AppDomain.CreateDomain("DllDomain"); 
Assembly a = appDomain.Load(fileName); 
//Assembly a = Assembly.LoadFrom(fileName); 
objType = a.GetType(className); 
obj = a.CreateInstance(className); 
object[] args = new object[1]; 
args[0]=(object) "test"; 
object ret = objType.InvokeMember("Perform", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, args); 
string output = ret.ToString(); 
obj = null; 
AppDomain.Unload(appDomain); 

c'est le code que je utilise dans un service WCF mais il ne fonctionne pas.

entendu que nous pouvons acheive en utilisant Shadow copie »dans AppDomain. Mais je ne sais rien sur 'Shadow Copying' et comment implémenter la même chose dans le code ci-dessus.

Veuillez fournir le code de travail comme exemple pour 'Shadow Copying'.

-B.S.

+0

@Downvoter: pourquoi Downvote? – venkat

+0

Juste à nouveau rencontré cette question. Je l'ai déprécié l'année dernière parce que ce n'est pas une question particulièrement intéressante. C'est un vidage de code et tout ce que vous avez à dire c'est que ça ne marche pas. Il n'est donc pas clair non plus quel problème vous espériez résoudre en utilisant Shadow Copying. – Stijn

Répondre

0

Vous pouvez charger des ensembles dans un domaine d'application, mais vous ne pouvez pas les décharger de ce domaine.

Cependant, dans un domaine d'application, vous pouvez créer un second domaine d'application et charger un ensemble dans le second domaine d'application. Vous pouvez ensuite choisir de décharger le second domaine d'application qui à son tour décharge l'assembly que vous avez chargé dans le deuxième domaine d'application.

C'est le principe de base. En pratique, vous trouverez un certain nombre d'obstacles (ils ont changé à travers les versions de .NET) à résoudre en particulier lorsque vous configurez une forme de communication entre les domaines d'application.

Fournir le code de travail ici serait probablement trop grand.