MEF- und ShadowCopying-DLLs, damit ich sie zur Laufzeit überschreiben kann

Ich versuche, meine Anwendungssperr-DLLs in meinem MEF-Plugin-Verzeichnis zu stoppen, damit ich die Assemblys zur Laufzeit überschreiben kann Ich möchte nicht die App anhalten müssen, um die Kopie zu machen.

Ich versuche dies zu tun, indem ich eine schattenkopierte Anwendungsdomäne für meine mef geladenen Assemblys wie folgt erstelle:

[Serializable]
    public class Composer:IComposer
    {
        private readonly string _pluginPath;
        public Composer(IConfigurePluginDirectory pluginDirectoryConfig)
        {
            _pluginPath = pluginDirectoryConfig.Path;
            var setup = new AppDomainSetup();
            setup.ShadowCopyFiles = "true"; // really??? is bool not good enough for you?
            var appDomain = AppDomain.CreateDomain(AppDomain.CurrentDomain.FriendlyName + "_PluginDomain", AppDomain.CurrentDomain.Evidence, setup);

            appDomain.DoCallBack(new CrossAppDomainDelegate(DoWorkInShadowCopiedDomain));      
        }

        private void DoWorkInShadowCopiedDomain()
        {
            // This work will happen in the shadow copied AppDomain.

            var catalog = new AggregateCatalog();
            var dc = new DirectoryCatalog(_pluginPath);
            catalog.Catalogs.Add(dc);
            Container = new CompositionContainer(catalog);
        }

        public CompositionContainer Container { get; private set; }
    }

und dann auf meinen MEF-Komponentenkatalog über den CompositionContainer für diese Klasse zugreifen. Der Kompositionscontainer scheint jedoch nur innerhalb der Shadowcopy-Domäne initialisiert zu sein (was sinnvoll ist), und dies bedeutet, dass er in meiner Anwendungsdomäne null ist. Ich habe mich nur gefragt, ob es eine bessere Möglichkeit gibt, dies zu tun, oder eine Möglichkeit, domänenübergreifende Abfragen durchzuführen, um meine MEF-Komponenten zu erhalten

Antworten auf die Frage(3)

Ihre Antwort auf die Frage