我已经看到有关动态加载程序集的问题
基本上,我想做三件事:
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异常。我也使用Process Explorer验证了这一点:它还显示了正在加载的启动路径中的程序集
也没有卸载组件。
我做错了什么???