Позднее связывание DLL-библиотек на основе архитектуры процессора [дубликат]
На этот вопрос уже есть ответ здесь:
- использование параллельных сборок для загрузки x64 или x32 версии DLL 5 ответов
- загрузить x64 или x86 DLL в зависимости от платформы? [дубликат] 3 ответа
В настоящее время я написание вспомогательной библиотеки, которая подключается к цеховым ПЛК через TopServer Software Toolbox.
Библиотека TopServer имеет отдельные версии для архитектур x86 и x64, и я хочу загрузить соответствующую версию во время выполнения, используя позднюю привязку, основанную на архитектуре процессора вызывающего кода. Методы в этих двух библиотеках имеют одинаковые сигнатуры.Я могу использовать reflection для загрузки соответствующего объекта с помощью приведенного ниже кода, но мне интересно, какой метод является лучшим использование этого экземпляра в вызывающем коде.
public class LateBinding
{
public static T GetInstance<T>(string dllPath, string fullyQualifiedClassName) where T : class
{
Assembly assembly = System.Reflection.Assembly.LoadFile(dllPath);
Type t = assembly.GetType(fullyQualifiedClassName);
return (T)Activator.CreateInstance(t);
}
}
Поскольку я запаздываю с привязкой, я не получаю типы до выполнения, поэтому думал, что создание интерфейса на основе сигнатур метода библиотек будет хорошим способом реализовать обе версии.
Есть ли у кого-нибудь мнение по этому методу или рекомендации по другим методам?1 ответ:
Если целевые библиотеки DLL различаются только по целевой архитектуре и сборки не имеют строгих имен, интерфейс не требуется.
Я предлагаю назвать их *_64.dll и *_86.dll соответственно и выбрать один для компиляции против.Во время выполнения все, что вам нужно сделать, это
System.Reflection.Assembly.LoadFile
правильный файл.