首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Assembly.Load和Assembly.LoadFrom的差异?

Assembly.Load和Assembly.LoadFrom的差异?
EN

Stack Overflow用户
提问于 2017-09-28 10:03:49
回答 1查看 4.3K关注 0票数 8

我的应用程序通过AppDomain.CurrentDomain.AssemblyResolve事件加载它需要的程序集。程序集是正在执行的程序集的资源。

代码语言:javascript
运行
复制
private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
{
    var executingAssembly = Assembly.GetExecutingAssembly();
    var assemblyName = new AssemblyName(args.Name);
    var resPath = assemblyName.Name + ".dll";

    using (var stream = executingAssembly.GetManifestResourceStream(resPath))
    {
        if (stream != null)
        {
            byte[] buffer = new byte[stream.Length];
            stream.Read(buffer, 0, buffer.Length);

            return Assembly.Load(buffer);
        }
    }

    return null;
}

一般来说,这很好,但是正在加载的程序集包含某些控件的默认样式,不会应用这些控件。但是,如果我不通过Assembly.Load加载程序集,而是将它保存到一个文件中并通过Assembly.LoadFrom加载它,那么一切都很好。

这两者有什么区别?当直接从内存加载程序集时,它为什么不能工作??或者为什么它在第一次将程序集保存到磁盘,然后用Assembly.LoadFrom加载它时工作?

我很困惑,我想直接从内存加载程序集,而不首先保存它们。

EN

回答 1

Stack Overflow用户

发布于 2019-11-23 11:06:52

Assembly.Load和Assembly.LoadFrom使用不同的加载上下文。Assembly.Load在宿主程序集(默认上下文)上下文中加载程序集。为正确加载所有依赖程序集,应从主机应用程序路径、GAC或应预先手动加载。

Assembly.LoadFrom不使用主机程序集上下文。它创建自己的加载上下文(负载-从上下文),并能够自动解析默认上下文中不存在的依赖程序集。这些程序集来自不在宿主应用程序路径下的路径。

默认样式似乎需要来自不位于宿主应用程序路径下的路径的程序集。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46466399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档