首先,我想解释一下我的目标: 我正在尝试编写一个模块化应用程序,因此我写了一个MainApplication来加载模块(例如ModulesForMainApplication)。我的目的是即使一个或多个模块不可用,MainApplication仍然可用。因此,我创建了以下项目结构:
我创建了一个包含两个项目的解决方案:
在“ 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);
为确保我尝试实例化的类型不为null,我检查了“ ModuleForMainApplicationType”。调试器显示以下内容:
ModuleForMainApplicationType {Name = "ModuleForMainApplication" FullName = "ModuleForMainApplication.Classes.ModuleForMainApplication"} System.Type {System.RuntimeType}
就目前而言,我认为这看起来像预期的那样,类型正确。问题是实例的创建,因为它引用了null,但我不知道为什么。最后一行引发异常,但是问题是由空引用对象引起的。
要问我的问题:我的问题在哪里,为什么“ ModuleForMainApplicationInstance”引用为null?