我有如下问题,如何利用AppDomain的实例属性ReflectionOnlyAssemblyResolve?
如下代码:
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication9 { class Program { static void Main(string[] args) { AppDomain b = AppDomain.CurrentDomain; b.ReflectionOnlyAssemblyResolve+= (j, k) => { Console.WriteLine(k.Name);//1 return Assembly.ReflectionOnlyLoad(k.Name); }; Assembly assembly = Assembly.ReflectionOnlyLoadFrom("ClassLibrary2.dll"); Console.ReadLine(); } } }
在这个程序集中,以仅加载(不允许执行程序集中任何代码)的方式加载了ClassLibrary2.dll程序集。
ClassLibrary2.dll的文件内容如下:
using ClassLibrary1; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ClassLibrary2 { public class Class2 { public Int32 Method() { return new Class1(3).getMax(4); } } }
在ClassLibrary2.dll程序集中,引用了ClassLibrary1.dll程序集。
我运行最上面Program程序,当程序加载ClassLibrary2.dll程序集时,会发现引用了ClassLibrary1.dll程序集,但是使用Assembly的ReflectionOnlyLoadFrom是不会加载任何依赖的程序集,也就是不会加载ClassLibrary1.dll程序集,因此就会触发ReflectionOnlyAssemblyResolve事件。但是发现1处的代码并没有被执行,这是为什么?