首页 > 后端开发 > C++ > 如何将程序集及其引用递归加载到单独的 AppDomain 中?

如何将程序集及其引用递归加载到单独的 AppDomain 中?

Linda Hamilton
发布: 2025-01-15 12:16:48
原创
639 人浏览过

How to Recursively Load Assemblies and Their References into a Separate AppDomain?

在 AppDomain 中加载具有递归引用的程序集

将程序集加载到单独的应用程序域 (AppDomain) 时,还需要手动加载其引用。否则,由于缺少依赖项,可能会导致 FileNotFoundException 错误。

为了递归加载程序集及其所有引用,建议:

<code class="language-C#">// 在当前 AppDomain 中创建一个代理类。
class Proxy : MarshalByRefObject
{
    public Assembly GetAssembly(string assemblyPath) => Assembly.LoadFile(assemblyPath);
}

// 创建一个新的 AppDomain。
AppDomain domain = AppDomain.CreateDomain("MyDomain", null, domaininfo);

// 在新的 AppDomain 中创建一个代理实例。
var value = (Proxy)domain.CreateInstanceAndUnwrap(
    typeof(Proxy).Assembly.FullName,
    typeof(Proxy).FullName);

// 使用代理将程序集加载到新的 AppDomain 中。
var assembly = value.GetAssembly(assemblyPath);

// 迭代程序集的引用并递归加载它们。
foreach (AssemblyName refAsmName in assembly.GetReferencedAssemblies())
{
    LoadAssemblyWithReferences(refAsmName, domain);
}</code>
登录后复制

使用 LoadFrom() 与 LoadFile() 加载程序集

使用 LoadFrom() 加载程序集将尝试在 GAC 或当前 AppDomain 的 bin 文件夹中查找程序集。如果程序集不在这两个位置中的任何一个位置,则此操作可能会失败。

相反,LoadFile() 从特定文件路径加载程序集。此方法要求您手动加载所有依赖项。但是,它可以更好地控制程序集加载过程。

按照上述步骤,可以将程序集及其所有引用递归加载到单独的 AppDomain 中,从而实现更隔离和受控的执行环境。

以上是如何将程序集及其引用递归加载到单独的 AppDomain 中?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板