2012-09-20 41 views
0

我有一个问题,一个DLL加载到我的新Appdomain也加载到主AppDomain!卸载后AppDomain和使用的DLL的问题

我有一个类从“MarshalByRefObject”inhertis“Servicebase”。

现在我有不同的孩子类,从这个基类继承。

这些子类应该在他们自己的应用程序域中进行安装。

这个我做这个代码:

 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); 

这个工程...

现在我创造我的实例与此代码:

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

当我现在“的AppDomain检查.CurrentDomain.GetAssemblies()“我的实例程序集未加载到我的主程序集中。

但exceuting此之后:

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

我目前大会还加载的dll。

有人可以告诉我为什么吗?我能做什么?

回答

0

ServiceBase是否与派生类具有相同的程序集?

如果是,那么你应该把它们分成两个不同的组件。一个与合约(基类),另一个与派生类。然后,您将不会从您的主项目中引用派生类的程序集。只有合约程序集应该被主项目引用,并且只有它将被加载到主AppDomain中。