0

我有一个问题,加载到我的新 Appdomain 的 DLL 也加载到了主 appdomain!

我有一个继承自 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。

谁能告诉我为什么?我能做什么?

4

1 回答 1

0

ServiceBase 是否与派生类在同一个程序集中?

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

于 2012-09-26T12:53:00.637 回答