从具有依赖关系管理的字节数组加载动态DLL

时间:2014-06-17 10:02:31

标签: c# .net dynamic dll

我正在尝试动态地在C#应用程序上加载一些C#DLL。我在byte[]列表中获取了所有DLL,我想加载它们而不将它们写入dll文件。

当我想使用dll应用程序时,我的应用程序崩溃了。 它返回System.IO.FileNotFoundException,因为它找不到dll文件。

我在每个Assembly.Load() dll上使用byte[]并且它似乎正常工作(没有崩溃和增加的汇编列表计数)并且我按正确的顺序加载它们(我不知道它是必要的。)

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

谢谢

1 个答案:

答案 0 :(得分:1)

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

可以将程序集加载到多个加载上下文之一,也可以不加载上下文。 Load(byte[])方法在没有上下文的情况下加载程序集,其中一个缺点是其他程序集无法自动绑定到它们。有关详细信息,请阅读MSDN中的Best Practices for Assembly Loading