Вы можете использовать System.Addin
framework (иногда известный как MAF
), который немного затрудняет правильную настройку, но который был разработан для обеспечения изоляции (защита от сбоев).System.Addin
основан на удаленном взаимодействии.С помощью этой среды вы можете позволить плагинам запускаться с ограниченными разрешениями в том же процессе, или в другом домене приложения, или даже в другом процессе.вариант.Однако это может привести к снижению производительности.
Этот код можно использовать для загрузки надстройки в другом домене приложения:
AppDomain addInDomain = AppDomain.CreateDomain("addin domain");
// addInDomain.PermissionSet = ...
AddInEnvironment env = new AddInEnvironment(addInDomain);
// Activate the add-in
IHostView addinInstance = addinToken.Activate<IHostView>(env);
Console.WriteLine(addinInstance.DoSomething());
AppDomain.Unload(addInDomain);
Если вы хотите загрузить надстройку в другой процесс, для полной изоляции:
AddInProcess process = new AddInProcess();
process.Start();
// Activate the add-in
IHostView addinInstance = addinToken.Activate<IHostView>(process, AddInSecurityLevel.Internet);
try
{
// use a catch block, prevent exceptions from the addin crashing the main app
Console.WriteLine(addinInstance.DoSomething());
}
catch (Exception e)
{
Console.WriteLine(e);
}
process.Shutdown();
Этот блог дает хорошее описание настройки этого параметра.
Возможно объединить System.Addin
с MEF, этодополнительные наборы инструментов, см. эту статью .
Обратите внимание, что модель System.Addin может обеспечивать защиту от сбоев, вам все равно придется иметь дело с замедлениями или взаимоблокировками в коде надстройки.Здесь поможет асинхронное использование.