我正在创建一些工具,该工具执行NUnit之类的几种操作。在此工具内,我打开.dll程序集并调用形成它的方法来运行一些测试。
一切正常,直到我需要在程序重新启动时重新加载.dll为止。这个想法是,当工具运行时,我们将所需的程序集复制到某个临时文件夹中并从那里调用。如果需要重新加载,请将另一个复制到另一个临时文件夹,然后尝试从另一个文件夹加载新复制的文件,然后加载到先前的装配对象
ExecutingAssembly = Assembly.LoadFrom(AssemblyFullPath);
但是我的问题是,在我将AssemblyFullPath更改为新的程序集并调用Assembly.LoadFrom之后,它只返回旧程序集第一次加载的内容,而不是第二次加载的!也许问题在于我们无法加载具有不同版本的多个程序集?解决办法是什么?
CLR确实支持将多个版本的强命名程序集加载到同一版本中AppDomain
。这仅在您的程序集被强命名并且每个程序集具有不同的版本时才有效。
我猜您正在处理未签名的程序集的可能性更大。如果是这种情况,那么您真正想要的是不可能的。将给定的组件加载到中后AppDomain
,它将一直保留在那里,直到将AppDomain
其卸载为止。为了使它起作用,您将必须将装入的程序集周围的所有工作抽象为单独的程序AppDomain
,AppDomain
并对每个程序集使用新的程序集
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句