C#组件加载错误的组件
我已经看到了关于动态加载程序集的问题 基本上,我想做三件事: 1) 动态加载用户选择(托管)的程序集 2) 修改程序集(在程序本身中) 3) 用新组件更换加载的组件 以下代码加载正确的程序集:C#组件加载错误的组件,c#,.net,.net-assembly,appdomain,assembly-loading,C#,.net,.net Assembly,Appdomain,Assembly Loading,我已经看到了关于动态加载程序集的问题 基本上,我想做三件事: 1) 动态加载用户选择(托管)的程序集 2) 修改程序集(在程序本身中) 3) 用新组件更换加载的组件 以下代码加载正确的程序集: System.Reflection.Assembly myDllAssembly = System.Reflection.Assembly.LoadFile(assemblyPath); 但是,据我所知,要替换文件,首先需要卸载它以删除文件句柄。因此,我尝试使用下面的代码将文件加载到AppDomain:
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对此进行了验证:它还显示了正在加载的启动路径中的程序集
此外,未卸载程序集
我做错了什么?您不应该将
Assembly
对象传递回mainAppDomain
,因为这也需要在mainAppDomain
中加载程序集。@PetSerAl我没有将Assembly对象传递给mainAppDomain
。我只是读取一个字符串(从程序集中的函数返回)并卸载程序集。我想在生成的新程序集中更新此字符串。我没有将程序集对象传递给主AppDomain
。您是:Assembly=dom.Load(assemblyName)代码>@PetSerAl哦,好的。那么,如何加载文件、执行函数和卸载文件(以便替换文件)?如果不使用Assembly Assembly=..
,如何使用GetType()
和GetMethod()
函数?