私の問題は、変更がほとんどなく、変更が表示されたエラーにどのように関連しているかを理解していないときに、履歴から古い DLL とは異なる結果が得られることです。
これは、SecurityPluginServices.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 用であり、多くのバージョンでほとんど変更されておらず、追加のプロパティとメソッドがいくつか追加されただけで、実装するインターフェイスとは関係ありません。新しいプラグイン DLL のコピーと ILDASM の古いプラグインの 1 つを開いてみましたが、どちらもメソッドが求めてSecurityInterface.ISecurityPlugin
いるものに関する同じ情報を含んでいるようです。.GetInterface