2010-10-01 7 views
0

Я пытаюсь разработать архитектуру плагина в .NET. Приложение будет .Net-приложением. Там будут каталоги, в которых есть плагины. Каждый каталог будет представлять собой плагин. Каждый каталог плагинов также будет содержать все DLL зависимостей. Плагины необходимо хранить в отдельном AppDomain, так как плагины могут использовать одни и те же сборки, но разные версии.Late binding in child AppDomain (.Net)

Как перебирает в цикле Еогеасп в Init(), я получаю System.IO.FileNotFoundException: Не удалось загрузить файл или сборку «[Имя Ассамблеи], Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = null или одной из его зависимостей. Система не может найти указанный файл. в _apDomain.Load() для сборок, которые не входят в основной проект.

Код:

readonly private AppDomain _appDomain; 
    internal ItemModuleAppDomain() 
    { 
     AppDomainSetup info = AppDomain.CurrentDomain.SetupInformation; 
     _appDomain = AppDomain.CreateDomain("ChildDomain"); 
    } 

    public void Init(string dllDir) 
    { 
     string[] dlls = Directory.GetFiles(dllDir, "*.dll", SearchOption.TopDirectoryOnly); 
     foreach(string dll in dlls) 
     { 
      _appDomain.Load(AssemblyName.GetAssemblyName(dll)); 
     } 

Любая идея, почему? Я пробовал несколько методов, таких как чтение сборки как массив байтов для загрузки.

ответ

0

Я считаю, что AppDomain.Load может быть неправильным методом для вашей цели - он загружает сборку как в текущий домен приложения, так и в целевой домен. И вы получаете сообщение об ошибке, потому что ваша сборка находится в подпапке, и .NET не знает об этом. Вы должны указать личные пути в конфигурации (http://msdn.microsoft.com/en-us/library/15hyw9x3.aspx). Вы также можете использовать событие AssemblyResolve или TypeResolve для AppDomain для разрешения.

Вы должны также посмотреть способ AppDomain.CreateInstanceFrom для загрузки основного типа плагина (и содержащего сборку).

+0

Спасибо. В итоге мы сильно назвали DLL, чтобы мы могли загрузить их в один и тот же AppDomain. – Anish

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