c# – Assembly.Load(byte [])如何工作?
发布时间:2020-12-16 01:49:36 所属栏目:百科 来源:网络整理
导读:我只是想知道如果我要在Web应用程序中加载相同的汇编字节两次会发生什么. 例如,我有这个代码 byte[] assem = System.IO.File.ReadAllBytes(appRoot + "/Plugins/Plugin.dll");var loadedAssem = Assembly.Load(assem);var plugin = loadedAssem.CreateInstan
我只是想知道如果我要在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”的情况. 解决方法
这将加载两个不同的程序集副本,每个副本都可以从您的应用程序中使用.每个程序集中的类型是不同的类型,不会相互交互.例如,如果从Copy1获取Widget并尝试将其传递给在Copy2上获取Widget的方法,则会导致运行时失败.一旦以这种方式加载程序集(即进入主AppDomain),就无法卸载程序集.
关于实例化: >如果您使用Assembly.CreateInstance(如帖子中所示),这将从您用于进行调用的Assembly实例创建它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |