Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 卸载后AppDomain和使用的DLL出现问题_C#_Plugins_Service_Appdomain_Appdomainsetup - Fatal编程技术网

C# 卸载后AppDomain和使用的DLL出现问题

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

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

我有一个从MarshallByRefObject继承的类“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]);
这很有效

现在,我使用以下代码创建实例:

        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中