我尝试使用Reflection向我的Windows.Net应用程序添加一个插件系统; 但是当有依赖关系的插件时它会失败.
Addon类必须实现一个接口'IAddon'并拥有一个空构造函数.
主程序使用Reflection加载插件:
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();
当addon不使用dependencie时,它工作得很好.但是如果我的插件引用并使用另一个在磁盘上的插件附近保存的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");
不要改变任何东西.
如果MyTools.dll位于同一目录Addon.dll,所有你需要做的就是打电话Assembly.LoadFrom
,而不是Assembly.LoadFile
让你的代码工作.否则,处理AppDomain.AssemblyResolve
事件是要走的路.