Прежде всего я хочу объяснить мою цель:
Я пытаюсь написать модульное приложение, и поэтому я написал MainApplication, которая загружает модули (например, ModulesForMainApplication). Моя цель заключается в том, чтобы MainApplication можно было использовать, даже если один или несколько модулей недоступны. Из-за этого я создал следующую структуру проекта:
Я создал Решение, которое содержит два проекта:
- MainApplication
- ModuleForMainApplication
В «ModuleForMainApplication» я определил метод тестирования, который возвращает только строку (как показано ниже).
public string RetrunSimpleString()
{
return "!";
}
В качестве дополнительной информации: «ModuleForMainApplication» имеет ссылку на «MainApplication», потому что мне нужно использовать класс MainApplication (чтобы не реализовывать их дважды).
После поиска в интернете и установки кода для моей цели, я застрял в проблеме. В приведенном ниже коде отображается «System.MissingMethodException». Работа с библиотеками DLL для меня новая, поэтому я сейчас не знаю, что вызывает эту проблему.
Assembly ModuleForMainApplicationAssembly = Assembly.LoadFrom(@"\Path\to\dll\MailProtectionComparison.dll");
Type ModuleForMainApplicationType = ModuleForMainApplicationAssembly.GetType("ModuleForMainApplication.Classes.ModuleForMainApplication");
object ModuleForMainApplicationInstance = Activator.CreateInstance(ModuleForMainApplicationType);
string x = (string)ModuleForMainApplicationType.InvokeMember("RetrunSimpleString", BindingFlags.InvokeMethod, null, ModuleForMainApplicationInstance, null);
Чтобы убедиться, что тип, который я пытаюсь создать, не является нулевым, я проверил "ModuleForMainApplicationType". Отладчик показывает следующее:
ModuleForMainApplicationType {Name = "ModuleForMainApplication" FullName = "ModuleForMainApplication.Classes.ModuleForMainApplication"} System.Type {System.RuntimeType}
На данный момент я думаю, что это выглядит так, как ожидалось, и тип получился правильно. Проблема заключается в создании экземпляра, потому что это ссылается на ноль, и я не знаю почему. Исключение выдается для последней строки, но проблема вызвана нулевым объектом, на который есть ссылка.
Подходя к моему вопросу: где моя проблема и почему «ModuleForMainApplicationInstance» ссылается на ноль?