2013-12-11 3 views
0

У меня есть сценарий, где мой клиент является WPF App скажет W, Есть 3 сборки говорит A, B, C, которые не должны подвергаться воздействию W, следовательно, 3 сборки ссылается на бетонном заводе, скажет F, который создает требуемый экземпляр и предоставляет W.Как загрузить ссылочную сборку в другую ссылочную сборку?

Я использую отражение в F, чтобы сгенерировать 3 объекта.

Ниже приведен код

return (IClass)Activator.CreateInstance(Assembly.Load("A").GetType("A.AClass"), 
BindingFlags.NonPublic | BindingFlags.Instance, null, null, null); 

код работает, если я ссылаться A в W, но не работает (System.IO.FileNotFound Exception), когда A упоминается в F (я перепроверена с Assembly.GetExecutingAssembly().GetReferencedAssemblies() и A не загружается).

Я прочитал, что Assembly не может быть загружен, если это не требуется. Но как мой клиент WPF загружает сборку. Если это ожидаемое поведение, я бы пошел с поиском текущего пути Directory и добавлением к нему A.dll. Любые мысли вокруг?

+0

Вы пытались использовать обработчик ['AppDomain.AssemblyResolve'] (http://msdn.microsoft.com/pl-pl/library/system.appdomain.assemblyresolve (v = vs.110) .aspx)? –

+0

Разве это не вспомогательная техника, я имею в виду, смогу ли я получить исходную требуемую сборку? –

+0

Насколько я понимаю, вы знаете эту требуемую сборку, поэтому можете ее предоставить через 'Assembly.LoadFrom' –

ответ

1

Я подозреваю, что файлы не копируются в AppDomain.CurrentDomain.BaseDirectory, когда решение построено. Без ссылки вам нужно будет вручную убедиться, что необходимые DLL-файлы скопированы в нужное место.

См. Комментарий BasconSah выше для предложения.

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