卸载后AppDomain和使用DLL的问题

时间:2012-09-20 07:39:11

标签: c# plugins service appdomain appdomainsetup

我遇到一个问题,即加载到我的新Appdomain的DLL也被加载到主应用程序域!

我有一个来自MarshalByRefObject的“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()”时,我的实例程序集未加载到我的主程序集中。

但是除了这个:

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

我当前的程序集也加载了dll。

有人可以告诉我为什么吗?我该怎么办?

1 个答案:

答案 0 :(得分:0)

ServiceBase与派生类在同一个程序集上吗?

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