我已经看到有关动态加载程序集的问题
基本上,我想做三件事:
1)动态加载用户选择(托管)的程序集
2)修改程序集(在程序本身中)
3)用新的替换加载的程序集
下面的代码加载正确的程序集:
System.Reflection.Assembly myDllAssembly = System.Reflection.Assembly.LoadFile(assemblyPath);
但是,据我所知,要替换文件,我首先需要卸载它以删除文件句柄。所以我尝试AppDomain
使用下面的代码加载文件:
AppDomain dom = AppDomain.CreateDomain("assemblyLoadDomain");
AssemblyName assemblyName = new AssemblyName();
assemblyName.CodeBase = assemblyPath;
Assembly assembly = dom.Load(assemblyName);
// do operation here
AppDomain.Unload(dom);
这将开始在应用程序启动路径中搜索程序集,而不是在assemblyPath
. 如果未找到,则给出 FileNotFound Exception。我也使用 Process Explorer 验证了这一点:它还显示了正在加载的启动路径中的程序集
也没有卸载程序集。
我究竟做错了什么 ???