我正在创建一些类似于 NUnit 的工具,执行多个操作。在这个工具内部,我会打开 .dll 程序集并调用其中的方法来运行一些测试。
一切都很顺利,直到我需要重新加载 .dll 而不重启程序。我的想法是,在工具运行时,我们将所需的程序集复制到某个临时文件夹,并从那里调用。如果需要重新加载,我会将另一个程序集复制到另一个临时文件夹,尝试从另一个文件夹加载新复制的程序集,并将其加载到之前的程序集对象中。
ExecutingAssembly = Assembly.LoadFrom(AssemblyFullPath);
但我的问题是,当我将AssemblyFullPath更改为新的路径并调用Assembly.LoadFrom时,它返回的仍然是第一次加载的旧程序集,而不是第二个新的程序集! 也许问题在于我们不能同时加载具有不同版本的多个程序集? 解决方案是什么?
Assembly.LoadFrom
不会尝试加载相同的程序集两次。Assembly.LoadFile
有些不同,可能会以某种方式工作,但即使它能够工作,也要准备好遇到许多奇怪的问题。通常最好将此类操作放在单独的AppDomain
中,并根据需要重新加载它。 - Luaan