在AppDomain.CreateInstanceAndUnwrap方法的MSDN文档中,它表示为注释
如果对由CreateInstanceAndUnwrap返回的类型为T1的对象的方法M进行早期绑定调用,并且该方法在程序集C中对类型为T2的对象的方法进行早期绑定调用与当前程序集或包含T1的程序集相比,程序集C被加载到当前应用程序域中。即使在DynamicMethod的主体或其他动态生成的代码中对T1.M()进行早期绑定调用,也会发生此加载。如果当前域是默认域,则在进程结束之前无法卸载程序集C.如果当前域尝试加载程序集C,则加载可能会失败。
(http://msdn.microsoft.com/en-us/library/3c4f1xde.aspx)
有没有人对上述说明有技术解释?为什么会这样?首次在对象上调用方法时是否完成了程序集依赖项查找?
答案 0 :(得分:3)
当您创建对象的实例时,会调用程序集依赖项。
让我们分析假设情景。我们有2个DLL:Lib1和Lib2。 (Lib1使用Lib2中的方法)。
在我们的应用程序中,main方法如下所示:
Worker localWorker = new Worker();
localWorker.PrintDomain();
AppDomain ad = AppDomain.CreateDomain("New domain");
Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap("Lib1","Lib1.Worker");
remoteWorker.PrintDomain();
程序集依赖性是在线检查:
Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap("Lib1","Lib1.Worker");
例如,如果Lib2.dll不存在,我们将获得异常。