我遇到一个问题,即加载到我的新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。
有人可以告诉我为什么吗?我该怎么办?
答案 0 :(得分:0)
ServiceBase与派生类在同一个程序集上吗?
如果是,那么你应该将它们分成两个不同的程序集。一个是契约(基类),另一个是派生类。然后,您将不会从主项目中引用派生类程序集。只有合同程序集应该由主项目引用,并且只会将其加载到主AppDomain中。