我只是想知道如果我要在网络应用中加载两次相同的汇编字节会发生什么。
例如我有这段代码
byte[] assem = System.IO.File.ReadAllBytes(appRoot + "/Plugins/Plugin.dll");
var loadedAssem = Assembly.Load(assem);
var plugin = loadedAssem.CreateInstance("Plugin.ThePlugin") as IPlugin;
我运行了这段代码并在第一个请求中假设它会将程序集加载到ram(或http运行时appdomain?)中,然后我可以创建其中任何内容的实例。
如果我再次运行此代码,请在第二个请求中说明第一次请求时程序集会发生什么情况?
ram中是否仍然存在?如果是这样,它如何区分两个组件?还是会覆盖以前的声明类?
这是我的理解,就像我在PHP中所做的那样,它不仅仅是“require_once”的情况。
答案 0 :(得分:7)
这将加载程序集的两个不同副本,每个副本都可以从您的应用程序中使用。每个程序集中的类型是不同的类型,不会相互交互。例如,如果从Copy1获取Widget并尝试将其传递给在Copy2上获取Widget的方法,则会导致运行时失败。一旦以这种方式加载组件(即进入主AppDomain),就无法卸载组件。
关于实例化: