2012-03-13 2 views
1

В настоящее время я использую MEF для загрузки плагинов для одного из моих приложений. Я хочу переместить эти плагины вне каталога bin в отдельный каталог плагинов, чтобы другие приложения могли использовать плагины. Проблема, с которой я сталкиваюсь, заключается в том, что один из плагинов зависит от настраиваемого класса сериализации xml в отдельной DLL, и когда я пытаюсь использовать конкретный плагин, я получаю сообщение «Не могу загрузить файл или сборку», когда он пытается загрузить отдельную dll.Невозможно загрузить определенную dll для плагина

Моего app.config в настоящее время имеет следующий:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <probing privatePath="plugins"/> 
    </assemblyBinding> 
</runtime> 

мне пришлось добавить зондирование в порядке моего первоначального применения для работы с этой конкретной библиотекой DLL. Все плагины dll изначально были расположены в подкаталоге внутри бункера под названием «плагины». Но теперь, когда я хочу переместить плагины в общий каталог для всех приложений, я хотел бы исправить эту проблему? Будем очень благодарны любой помощи.

+0

Would перемещающего пользовательских XML-сериализации класса/плагин к GAC быть жизнеспособным решением для вас? – M3NTA7

+0

К сожалению, я не могу этого сделать. – arc1880

+0

Странно, я тоже использую MEF; Я могу поместить зависимости в каталог плагинов, и он просто работает. Какой каталог вы используете? Я полагаю, вы должны в любом случае использовать ILMerge, чтобы присоединиться к сообщению d12's – Dirk

ответ

0

Вы должны убедиться, что все ваши зависимости находятся в ваших каталогах.

на него должен выглядеть как-то вроде этого:

var catalog = new AggregateCatalog(); 
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); 
catalog.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));//dependencies your plugin dll needs 
catalog.Catalogs.Add(new DirectoryCatalog(@"YourPluginFolderPath\Plugins\"));//your plugin dll's 

var cc = new CompositionContainer(catalog); 
var t = cc.GetExport<IMyPluginTestStuffExport>().Value; 
Смежные вопросы