Я конвертирую доморощенную архитектуру плагинов в MEF .NET 4.0. Приложение на базе MEF прекрасно работает, когда оно запускается с моей локальной машины. Однако когда я перемещаю приложение в общий сетевой ресурс и затем запускаю приложение, MEF больше не загружает мои плагины.
Когда я присоединяю сеанс отладки к процессу и проверяю объект DirectoryCatalog, я вижу, что в свойствах Assemblies или Parts отсутствуют элементы. FullPath - это правильный каталог, а свойство LoadFiles включает в себя все библиотеки DLL в искомом каталоге.
Сначала я думал, что это проблема CasPol, пока не попытался изменить CasPol и получил предупреждение о том, что CasPol больше не включен по умолчанию в .NET 4.0. Это должно быть что-то еще. У меня есть Полные разрешения для рассматриваемого каталога.
Вот свойство, которое будет содержать импортированные надстройки:
[ImportMany]
private IEnumerable<IRecipient> RecipientAddIns;
А вот метод, который обнаруживает и импортирует AddIns:
private void LoadRecipientAddIns()
{
using (var catalog = new AggregateCatalog())
{
// Look for IRecipient AddIns in the ./Recipients directory.
catalog.Catalogs.Add(new DirectoryCatalog("Recipients"));
// Look for IRecipient AddIns in subdirectories hanging off of ./Recipients.
foreach (string currentDirPath in Directory.GetDirectories("Recipients"))
catalog.Catalogs.Add(new DirectoryCatalog(currentDirPath));
using (var compositionContainer = new CompositionContainer(catalog))
{
compositionContainer.ComposeParts();
compositionContainer.SatisfyImportsOnce(this);
// The discovered AddIns should now be in the RecipientAddIns property.
}
// Do stuff with the Recipient AddIns
foreach (var recipient in this.RecipientAddIns)
{
...
}
}
// Clear the list of discovered Recipient AddIns
this.RecipientAddIns = null;
}
Есть идеи?
Спасибо.