首页 新闻 会员 周边

如何利用AppDomain的实例属性ReflectionOnlyAssemblyResolve?

0
[待解决问题]

我有如下问题,如何利用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处的代码并没有被执行,这是为什么?

HDWK的主页 HDWK | 初学一级 | 园豆:152
提问于:2018-08-18 23:37
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册