Можно ли использовать отражение для загрузки и вызова метода в DLL, имеющей более высокую структуру .net? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть приложение, которое использует отражение, чтобы загрузить .dll и вызвать метод с параметрами. Модуль отражения был построен с использованием .net 4.5. Это работает у нас годами. Недавно мы попытались использовать dll, созданную с использованием .net4.7.2, и модуль отражения исключает при вызове invoke, но метод не является причиной исключения, так как этот метод имеет обработчик исключения, который регистрирует ошибку. что оно даже не достигнуто, кажется, оно терпит неудачу в момент вызова.

это ошибочный код (здесь «плагин» представляет собой изолированную сборку .net4.7.2, которая имеет метод для вызова):

        object objRef = null;
        using((objRef as IDisposable)) {
            objRef = Activator.CreateInstance(plugin.type);
            MethodInfo methodToInvoke;
            if(plugin.methods[method].Count == 1) {
                methodToInvoke = plugin.methods[method].Values.Single();
            } else {
                // get the hashcode for all the names of the types; use this as the key
                var parameterHash = args.Select(arg => arg.GetType().Name.GetHashCode()).Aggregate(0, (res, next) => res | next);
                methodToInvoke = plugin.methods[method][parameterHash];
            }
            return methodToInvoke.Invoke(objRef, args);
        }

результат - необработанное исключение:

Исключение было сгенерировано целью вызова. StackTrace в System.RuntimeMethodHandle.InvokeMethod (Цель объекта, аргументы Object [], сигнатура сигнатуры, логический конструктор) в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal (параметры объекта, параметры объекта [], аргументы Object []) в System.Reflection.RunfoM.Invoke (Object obj, BindingFlags invokeAttr, Binder binder, параметры Object [], CultureInfo culture) в FactSet.IS.Core.Infrastructure.PluginManager.IsolatedAssembly.Invoke (активатор строки, метод String, объект [] args) в FactSet.IS.Core.Infrastructure.PluginManager. Не удалось инициализировать систему конфигурации

Я не знаю, что означает "Не удалось инициализировать систему конфигурации"

...