Некоторый фон ...
У меня есть сборка .net (.net framework 4.6, fwiw), которая работает как плагин в хост-приложении.Хост-приложение предоставляет API, который плагин использует для своей деятельности, а также предоставляет SDK, содержащий справочные сборки, которые проект плагина использует во время сборки для компиляции плагина.
Ожидается, что во время выполнения хост-приложение будет на много версий раньше, чем был создан плагин, и это нормально, если API, который он предоставляет через SDK, не изменился.(при внесении изменений генерируется новая версия SDK / API, и хост поддерживает только плагины, работающие с текущей версией API)
Теперь я хочу создать тест, который может проверить, что текущая сборкахост-приложение не изменило API, и, соответственно, произойдет сбой, если будет обнаружено критическое изменение (в этом случае мы решим, следует ли изменить версию API или отменить это конкретное изменение и т. д.)
Проблема, с которой я столкнулсяявляется то, что, хотя некоторые изменения API могут быть обнаружены во время загрузки (что здорово, мой тест не может загрузить плагин, и я сделал), многие не делают.В частности, ссылки на API хоста из различных методов класса в сборке плагина не разрешаются до тех пор, пока метод плагина фактически не будет выполнен.
Например, скажем, мой плагин имеет метод PluginMethod, который вызывает некоторый хост-метод HostMethodA, предоставленный HostClass в хост-приложении, а в текущей сборке хост-приложения имя метода HostMethodA изменяется на HostMethodB,
В таком случае я могу успешно загрузить сборку плагина, но не могу обнаружить, что ссылка на HostMethodA не будет выполнена во время выполнения, пока я не создам экземпляр класса, содержащего плагин, и фактически не выполню PluginMethod,
Я перепробовал все, что мог придумать, чтобы получить ссылки в загруженной сборке плагина для полного разрешения, но, если не считать фактического выполнения метода, мне ничего не помогло.
ЭтоПохоже, в сборке должен быть какой-то метод (или Type или MethodInfo), который заставил бы среду выполнения попытаться разрешить все ссылки во всех методах в сборке (или Type или Method) без необходимости выполнять каждый путь кодав сборе.Но я не могу найти такой механизм.
В качестве альтернативы было бы достаточно, если бы я мог получить список элементов типа MemberInfo, которые представляют внешние ссылки на методы в сборке плагина (имя сборки, class :: method), количество и типы параметров будет делать) Я мог бы проверить их с моей текущей версией приложения хоста.Не могу найти хороший способ сделать это либо.
Спасибо за чтение этого, я очень ценю любые предложения.
Роджер