Использование AppDomain для загрузки DLL как встроенного файла ресурсов - PullRequest
0 голосов
/ 18 января 2019

Как я могу загрузить более 1 файла DLL, используя

(( AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler() ))

Это только первый работает, но другой не работает? !! Мне нужно загрузить оба встроенных файла DLL-файла, чтобы я мог использовать приложение без файлов !!

     public MainWindow()
    {
         AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
         AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve2);
        InitializeComponent();
    }


 static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs e)
    {
        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DS.WpfAnimatedGif.dll"))
        {
            byte[] assemblyData = new byte[stream.Length];
            stream.Read(assemblyData, 0, assemblyData.Length);
            return Assembly.Load(assemblyData);
        }
    }

    static System.Reflection.Assembly CurrentDomain_AssemblyResolve2(object sender, ResolveEventArgs e)
    {
        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DS.Newtonsoft.Json.dll"))
        {
            byte[] assemblyData = new byte[stream.Length];
            stream.Read(assemblyData, 0, assemblyData.Length);
            return Assembly.Load(assemblyData);
        }
    }

1 Ответ

0 голосов
/ 18 января 2019

Когда вы возвращаетесь из первого обработчика событий, следующий игнорируется.

Это согласно документации здесь :

Если для этого события зарегистрировано более одного обработчика события, обработчики события вызываются по порядку, пока обработчик события не вернет значение, которое не является нулевым. Последующие обработчики событий игнорируются.

...