2012-06-24 2 views
0

У меня есть приложение, которое загружает определенные (расширяемые) функции через Mef. Поскольку эти модули (возможно) используют сторонние элементы управления (Telerik), я хочу свести к минимуму время загрузки пользователя (при открытии форм с использованием вышеупомянутых элементов управления), я хочу предварительно загрузить сборки этих ссылок модулей Mef.Добавить путь сборки Mef к пути .Load AppDomain.

Что я делаю, это использовать метод Assembly.GetReferencedAssemblies (..), чтобы получить имена ссылочных ассемблеров на модуль Mef и попытаться выполнить Assembly.Load (..) их.

Поскольку модули расположены «где-то» в файловой системе (как правило, отличаются от пути ExecutingAssembly), загрузка не выполняется для ссылок на эти модули Mef, которые не находятся в Gac.

Есть ли способ изменить мой путь загрузки сборки AppDomain.CurrentDomain? Я знаю событие AppDomain.AssemblyLoad, но использование этого несколько громоздко, так как каждый модуль может находиться в разных каталогах.

ответ

0

Вы использовали, чтобы иметь возможность просто позвонить AppDomain.AppendPrivatePath, но этот метод теперь обозначен как обнуление, поскольку он может вводить проблемы порядка загрузки (read here). Рекомендуемый подход состоит в том, чтобы либо обновить вашу конфигурацию, чтобы включить дополнительные пути, либо использовать AppDomainSetup.PrivateBinPath (но это последнее было бы при создании новых доменов приложений).

Чтобы применить изменения конфигурации:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin2\subbin;bin3"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

(Отменено прямо из associated MSDN page). Обратите внимание, что вы можете указать несколько путей исследования, разделив их точкой с запятой. Вы можете рискнуть с помощью AppDomain.AppendPrivatePath(...), он по-прежнему существует с .NET BCL v4.0, но по какой-то причине он помечается как obselete.

+0

Thanks Matthew. Я попробовал AppDomain.AppendPrivatePath, но это не сработало и интересно после вызова этого метода, свойство .PrivatePath AppDomain было/остается пустым и загрузка по-прежнему не выполняется. Я также столкнулся с частью в app.config, но проблема в том, что путь (ы) «динамический». Я интересуюсь тем, как MEF справляется с этим, потому что, если я позволяю .Net делать свою нормальную, ленивую загрузку необходимых сборочных ссылок, она отлично работает. –

Смежные вопросы