как загрузить зависимую сборку? - PullRequest
4 голосов
/ 15 июня 2011

У меня есть обработчик проекта, и он зависит от двух других проектов.

Когда я компилирую проект, я получаю dll Processor.dll и зависимую от другого проекта dll в папке Bin. Processor.dll BusinessAction.dll и Repository.dll.

Я попытался вызвать метод из Processor.dll, инициировав тип ProcessRequest class.

Например,

 Assembly processorAssembly = Assembly.LoadFile(path + "Processor.DLL"));

        Type myType= processorAssembly.GetType("Namespace.ProcessRequest");

        myType.InvokeMember("Process", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, submitOfferType, new object[] { 12345 });

Метод процесса имеет некоторую логику для обработки и сохранения его в базе данных.

при вызове метода продолжения с использованием InvokeMember ()

я получаю исключение Не удалось загрузить файл или сборку 'Namespace.BusinessAction, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null' или одну из его зависимостей.Система не может найти указанный файл.

Должен ли я вызвать метод?

Ответы [ 2 ]

8 голосов
/ 15 июня 2011

Appdomain имеет событие, которое вызывается, если он не может найти ссылку:

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

В обработчике событий вы можете искать сборку вручную:

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    string s = @"C:\lib\" + args.Name.Remove(args.Name.IndexOf(',')) + ".dll";
    return Assembly.LoadFile(s);
}
2 голосов
/ 15 июня 2011

1001 * попробовать *

Assembly processorAssembly = Assembly.LoadFrom(path + "Processor.DLL")); 

это загрузит все поддерживаемые DLL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...