Сопоставление классов из сборок, хранящихся в другой папке

Я пытаюсь создать расширяемое приложение, используя MEF и свободный Nhibernate как ORM. Это работало хорошо, пока я не решил хранить сборки расширений в отдельной папке (\ Extensions). MEF загружает расширения без каких-либо проблем, но nhibernate выдает исключения, потому что не может найти сборку.

Есть ли способ добавить папку расширений в путь поиска сборки?

Состав MEF:

[ImportMany]
public IEnumerable<IModule> Modules { get; private set; }

public void LoadModules()
{
    _initialized = false;
    var catalog = new DirectoryCatalog("Extensions");
    var container = new CompositionContainer(catalog);
    container.ComposeParts(this);

}

Отображение:

foreach (var module in modules)
{
    var assembly = module.GetType().Assembly;
    config.Mappings(m => m.FluentMappings.AddFromAssembly(assembly));
}

person doerig    schedule 03.06.2011    source источник


Ответы (1)


Если я правильно понимаю ваш вопрос, есть несколько вариантов:

AppDomain.CurrentDomain.SetupInformation.PrivateBinPath будет работать, если ваш каталог расширений находится или находится в подкаталоге каталога приложения.

В качестве альтернативы вы можете обработать событие AppDomain.AssemblyResolve.

person Pete    schedule 03.06.2011
comment
Спасибо! Я нашел другое решение, используя app.config <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="extensions"/> </assemblyBinding> </runtime> - person doerig; 06.06.2011