我只是想知道如果我在web应用程序中加载两次相同的程序集字节会发生什么。
例如,我有这样的代码
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“的例子。
发布于 2011-11-30 06:47:40
这将加载程序集的两个不同副本,每个副本都可以从您的应用程序中使用。每个程序集中的类型都是不同的类型,并且不会彼此互操作。例如,如果您从Copy1获取一个小部件,并尝试将其传递给一个在Copy2上获取小部件的方法,这将导致运行时失败。一旦程序集以这种方式加载(即加载到您的主AppDomain中),就不可能卸载它们。
关于实例化:
https://stackoverflow.com/questions/8318798
复制相似问题