抽象クラスを持つアプリケーションを作成しました。このクラスの実装をプラグインとしてサポートしたいと考えています。
これは抽象クラスです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
namespace Stub.Logic {
public abstract class Connection {
…stuff
}
}
これは実装です:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using Stub.Logic;
namespace MqConnection {
public class MqConnection : Connection {
…stuff
}
}
プラグインは、読み取りとロードが行われるフォルダーにドロップされます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
namespace Stub.Logic {
public class PluginManager {
private static List<Type> connectionTypes = new List<Type>();
public static void LoadConnectionTypes(string path) {
DirectoryInfo dllDirectory = new DirectoryInfo(path);
FileInfo[] dlls = dllDirectory.GetFiles("*.dll");
foreach (FileInfo dllFileInfo in dlls) {
try {
Assembly assembly = Assembly.LoadFrom(dllFileInfo.FullName);
connectionTypes.AddRange(**assembly.GetTypes()**);
} catch (Exception ex) {
if (ex is System.Reflection.ReflectionTypeLoadException) {
var typeLoadException = ex as ReflectionTypeLoadException;
var loaderExceptions = typeLoadException.LoaderExceptions;
TextWriter writer = new StreamWriter(@"C:\Users\yoav.benzvi\Desktop\error.txt");
writer.WriteLine(loaderExceptions[0].ToString());
writer.Close();
}
}
}
}
}
}
assembly.GetTypes() 呼び出しで失敗します。これは私が得ているエラーです:
System.IO.FileNotFoundException: ファイルまたはアセンブリ 'StubLogic、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名: 'StubLogic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
プラグイン フォルダに StubLogic.dll が必要ですか? すでにアプリケーションの一部であるため冗長に思えますが、何が間違っているのでしょうか?
編集:参照プロパティの追加:
Edit2:すべてにお詫び申し上げます。コードは機能しています。問題は私の悪いテストにありました。繰り返しますが、ここで時間を無駄にしてしまった人にはお詫び申し上げます。