2012-09-20 3 views
0

J'ai un problème qu'une DLL chargée sur mon nouveau Appdomain est également chargée dans le domaine principal principal!Problèmes avec AppDomain et DLL utilisée après le déchargement

J'ai une classe "Servicebase" qui appartient à MarshalByRefObject.

Maintenant, j'ai différentes classes enfants qui héritent de cette classe de base.

Ces classes enfants doivent être installées dans leur propre domaine d'application.

Ce que je fais avec ce code:

 AppDomainSetup setup = new AppDomainSetup(); 
     setup.ApplicationBase = Path.GetDirectoryName(dllFile); 
     setup.ApplicationName = Path.GetFileNameWithoutExtension(dllFile); 
     setup.LoaderOptimization = LoaderOptimization.MultiDomainHost; 
     setup.ShadowCopyFiles = "true"; 
     setup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; 

     hostAppDomain = AppDomain.CreateDomain(setup.ApplicationName, AppDomain.CurrentDomain.Evidence, setup); 

cela fonctionne ...

maintenant je crée mon exemple avec ce code:

host = hostAppDomain.CreateInstanceFrom(dllFile, className.Split(',')[0]); 

quand je vérifie maintenant avec « AppDomain .CurrentDomain.GetAssemblies() "mon assembly d'instance n'est pas chargé dans mon assembly principal.

Mais après exceuting ceci:

  var inst = (ServiceBase)host.Unwrap(); 

mon montage actuel a également chargé le dll.

Quelqu'un peut-il me dire pourquoi? Et que pouvais-je faire?

Répondre

0

ServiceBase est-il sur le même assembly avec les classes dérivées?

Si c'est le cas, vous devriez les séparer en deux assemblages différents. Un avec le contrat (la classe de base) et l'autre avec les classes dérivées. Ensuite, vous ne référencerez pas l'assembly de classes dérivées de votre projet principal. Seul l'assemblage du contrat doit être référencé par le projet principal et seul celui-ci sera chargé dans le domaine principal AppDomain.

Questions connexes