新しい 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をロードしました。
誰かが私の理由を教えてもらえますか? そして、私は何ができますか?