我的问题是,我从历史中得到了与我们的旧 DLL 不同的结果,当时几乎没有变化,而且我不知道这些变化与显示的错误有什么关系。
这是我们的 SecurityPluginServices.dll 模块中方法的一部分,它本质上将插件添加到列表中,以便主程序可以使用它们。
它在一个集合文件夹中获取所有 DLL,然后对每个 DLL 运行下面的代码。
private void AddPlugin(string FileName, LoggingUtilities.Source source)
{
//Create a new assembly from the plugin file we're adding..
Assembly pluginAssembly = Assembly.LoadFrom(FileName);
try
{
//Next we'll loop through all the Types found in the assembly
foreach (Type pluginType in pluginAssembly.GetTypes())
{
if (pluginType.IsPublic) //Only look at public types
{
if (!pluginType.IsAbstract) //Only look at non-abstract types
{
//Gets a type object of the interface we need the plugins to match
Type typeInterface = pluginType.GetInterface("SecurityInterface.ISecurityPlugin", true);
//Make sure the interface we want to use actually exists
if (typeInterface != null)
{
// Do work here
}
typeInterface = null; //Mr. Clean
}
}
}
pluginAssembly = null; //more cleanup
}
catch (ReflectionTypeLoadException ex1)
{
Console.WriteLine(ex1.Message);
}
catch (Exception ex2)
{
Console.WriteLine(ex2.Message);
}
}
我遇到的问题是每次到达Type typeInterface = pluginType.GetInterface("SecurityInterface.ISecurityPlugin", true);
它总是返回null。我需要加载的插件是用于 NTLM 和 LDAP 的,它们在许多版本中变化很小,只添加了几个额外的属性和方法,与实现的接口无关。我在 ILDASM 中打开了一个较新的插件 DLL 和一个较旧的插件的副本,它们似乎都包含有关SecurityInterface.ISecurityPlugin
该.GetInterface
方法正在寻找的相同信息。