我尝试使用反射向我的 Windows.Net 应用程序添加一个插件系统;但是当有依赖的插件时它会失败。
插件类必须实现一个接口“IAddon”并有一个空的构造函数。
主程序使用反射加载插件:
Assembly assembly = Assembly.LoadFile(@"C:\Temp\TestAddon\Addon.dll");
Type t = assembly.GetType("Test.MyAddon");
ConstructorInfo ctor = t.GetConstructor(new Type[] { });
IAddon addon= (IAddon) ctor.Invoke(new object[] { });
addon.StartAddon();
当插件不使用依赖项时效果很好。但是,如果我的插件引用并使用保存在磁盘中插件附近的另一个 DLL (C:\Temp\TestAddon\MyTools.dll),它将失败:
System.IO.FileNotFoundException: 无法加载文件或程序集 'MyTools.dll ' 或其依赖项之一。
我不想在我的可执行文件附近复制插件 DLL,我该如何告诉 .Net 运行时在“C:\Temp\TestAddon\”中搜索任何依赖项?
请注意,添加
Assembly assembly = Assembly.LoadFile(@"C:\Temp\TestAddon\MyTools.dll");
不要改变任何东西。