Позднее связывание DLL-библиотек на основе архитектуры процессора [дубликат]


На этот вопрос уже есть ответ здесь:

В настоящее время я написание вспомогательной библиотеки, которая подключается к цеховым ПЛК через 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 6

1 ответ:

Если целевые библиотеки DLL различаются только по целевой архитектуре и сборки не имеют строгих имен, интерфейс не требуется.

Я предлагаю назвать их *_64.dll и *_86.dll соответственно и выбрать один для компиляции против.

Во время выполнения все, что вам нужно сделать, это System.Reflection.Assembly.LoadFile правильный файл.