Извинения за изворотливый вопрос - счастливы перефразировать, если у кого-то есть лучшее предложение.Как я могу динамически ссылаться на сборку, которая ищет другую сборку?
Я пытаюсь создать объект, динамически вызывая сборку, принадлежащую другому приложению.
Следующий код PowerShell красиво работает для меня:
[Reflection.Assembly]::LoadFrom("C:\Program Files\Vendor\Product\ProductAPI.dll")
$bobject = new-object ProductAPI.BasicObject
$bobject.AddName("Some Name")
Я изо всех сил, чтобы сделать то же самое в C#. Основываясь на других должностях на StackOverflow я в настоящее время это:
System.Reflection.Assembly myDllAssembly =
System.Reflection.Assembly.LoadFile("C:\\Program Files\\Vendor\\Product\\ProductAPI.dll");
System.Type BasicObjectType = myDllAssembly.GetType("ProductAPI.BasicObject");
var basicObjectInstance = Activator.CreateInstance(BasicObjectType);
Окончательные результаты линии в TargetInvocationException.
{ «Не удалось загрузить файл или сборку„AnotherObject, Version = 1.2.345.0, Culture = нейтрально, PublicKeyToken = нуль“или один из его зависимостей. Система не может найти указанный файл.»
Похоже, что конструктор BasicObject пытается вызвать AnotherObject (из AnotherObject.dll в той же папке), но не может его найти.
Любые советы о том, как обойти это?
Я думаю, что DLL вы загружаете требует другого DLL для работы. Вы можете изучить зависимости DLL с помощью этого инструмента. http://www.dependencywalker.com/ – cgTag
Когда вы найдете недостающую DLL. Скопируйте его в папку выпуска или измените Windows PATH, чтобы включить его. – cgTag
Стоит проверить, что не загружается с помощью ['FUSLOGVW.exe'] (http://msdn.microsoft.com/en-us/library/e74a18c4.aspx) (* Assembly Binding Log Viewer *), который покажет вам, что не загружается (и где выглядит загрузчик .NET). – Richard