我编写了一个具有抽象类的应用程序。我想支持这个类作为插件的实现。
这是抽象类:
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,版本=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。文件名:'StubLogic,版本=1.0.0.0,文化=中性,PublicKeyToken=null'
我需要在插件文件夹中有 StubLogic.dll 吗?似乎是多余的,因为它已经是应用程序的一部分,所以我做错了什么?
编辑:添加参考属性:
Edit2:向所有人道歉。代码正在运行。问题在于我的糟糕测试。再次向在这里浪费时间的人道歉。