动态dll加载从字节数组与依赖关系管理
本文关键字:依赖 关系 管理 数组 字节数 dll 加载 字节 动态 | 更新日期: 2023-09-27 18:08:52
我正在尝试在c#应用程序上动态加载一些c# dll。我得到了byte[]
列表中的所有DLL,我想加载它们而不将它们写入DLL文件。
当我想使用dll应用程序时,我的应用程序崩溃了。它返回给我一个System.IO.FileNotFoundException
,因为它没有找到dll文件。
我在每个byte[]
dll上使用Assembly.Load()
,它似乎正常工作(没有崩溃和增加的汇编列表计数),我以良好的顺序加载它们(我不知道它是必要的)。
Assembly assembly = Assembly.Load(binDll);
AssemblyName[] referencedAssembly = assembly.GetReferencedAssemblies();
foreach (AssemblyName referencedAssemblyName in referencedAssembly)
{
if (!loadedDllList.Contains(referencedAssemblyName.Name) && this.Apps.Where(a => a.Item1 == referencedAssemblyName.Name).Count() > 0)
{
this.loadDll(referencedAssemblyName.Name);
}
}
TX.AddInStore.Load(binDll, dllName, null, null); //LOAD DLL on our application
loadedDllList.Add(dllName);
谢谢
您必须订阅AppDomain.CurrentDomain.AssemblyResolve
事件并在公共语言运行库无法自行解析它们时返回正确的程序集。
程序集可以加载到多个加载上下文之一,也可以不加载上下文。Load(byte[])
方法加载没有上下文的程序集,缺点之一是其他程序集不能自动绑定到它们。有关详细信息,请参阅MSDN中程序集加载的最佳实践。