C# 卸载后AppDomain和使用的DLL出现问题
我有一个问题,加载到我的新Appdomain的DLL也加载到主Appdomain 我有一个从MarshallByRefObject继承的类“Servicebase” 现在我有了从这个基类继承的不同的子类 这些子类应该在它们自己的应用程序域中实例化 我使用此代码执行以下操作:C# 卸载后AppDomain和使用的DLL出现问题,c#,plugins,service,appdomain,appdomainsetup,C#,Plugins,Service,Appdomain,Appdomainsetup,我有一个问题,加载到我的新Appdomain的DLL也加载到主Appdomain 我有一个从MarshallByRefObject继承的类“Servicebase” 现在我有了从这个基类继承的不同的子类 这些子类应该在它们自己的应用程序域中实例化 我使用此代码执行以下操作: AppDomainSetup setup = new AppDomainSetup(); setup.ApplicationBase = Path.GetDirectoryName(dllFi
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]);
这很有效
现在,我使用以下代码创建实例:
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.GetAssemblys()”时,我的实例程序集没有加载到我的主程序集中
但在执行此命令之后:
var inst = (ServiceBase)host.Unwrap();
我当前的程序集也加载了dll
有人能告诉我为什么吗?我该怎么办?ServiceBase与派生类在同一个程序集上吗 如果是,则应将它们拆分为两个不同的程序集。一个使用契约(基类),另一个使用派生类。然后,您将不会引用主项目中的派生类程序集。主项目只应引用合同程序集,并且仅将其加载到主AppDomain中