使用 AppDomain 将 DLL 作为嵌入式资源文件加载
Posted
技术标签:
【中文标题】使用 AppDomain 将 DLL 作为嵌入式资源文件加载【英文标题】:Using AppDomain to load DLL as embedded resource file 【发布时间】:2019-01-17 23:19:59 【问题描述】:我怎样才能加载超过 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】:一旦您从第一个事件处理程序返回,下一个事件处理程序将被忽略。
这是as per the documentation here:
如果为此事件注册了多个事件处理程序,则按顺序调用事件处理程序,直到事件处理程序返回一个非空值。后续事件处理程序将被忽略。
【讨论】:
不明白,我需要在我的程序中加载2个dll文件,我该怎么做?!以上是关于使用 AppDomain 将 DLL 作为嵌入式资源文件加载的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有 dll 的应用程序从内存加载到 AppDomain 中并执行它?