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 は派生クラスと同じアセンブリにありますか?

そうである場合は、それらを 2 つの異なるアセンブリに分割する必要があります。1 つはコントラクト (基本クラス) で、もう 1 つは派生クラスです。次に、メイン プロジェクトから派生クラス アセンブリを参照しません。コントラクト アセンブリのみがメイン プロジェクトによって参照され、それのみがメイン AppDomain に読み込まれます。

于 2012-09-26T12:53:00.637 に答える