MEF и ShadowCopying DLL, чтобы я мог перезаписать их во время выполнения
Я пытаюсь остановить DLL-библиотеки блокировки приложений в каталоге плагинов MEF, чтобы я мог перезаписать сборки во время выполнения (заметьте, я на самом деле не пытаюсь, чтобы MEF перезагружал их на лету, при следующем запуске приложения все в порядке, я просто не хочу останавливать приложение, чтобы сделать копию)
Я пытаюсь сделать это путем создания домена приложения теневого копирования для загруженных мной сборок, как показано ниже:
[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; }
}
а затем получить доступ к моему каталогу компонентов MEF через CompositionContainer для этого класса. Однако составной контейнер, кажется, инициализируется только внутри домена shadowcopy (что имеет смысл), и это означает, что он является нулевым в моем домене приложения. Мне просто интересно, есть ли лучший способ сделать это или какой-либо способ кросс-доменного запроса, чтобы получить мои компоненты MEF