动态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);

谢谢

动态dll加载从字节数组与依赖关系管理

您必须订阅AppDomain.CurrentDomain.AssemblyResolve事件并在公共语言运行库无法自行解析它们时返回正确的程序集。

程序集可以加载到多个加载上下文之一,也可以不加载上下文。Load(byte[])方法加载没有上下文的程序集,缺点之一是其他程序集不能自动绑定到它们。有关详细信息,请参阅MSDN中程序集加载的最佳实践。