插件 AppDomains 解决方法

2024-04-18

在处理自己的子目录中的插件程序集时,存在一个众所周知的问题:一旦这些程序集尝试从其子目录加载各自的依赖项,它们将无法加载。解决方案是在 AppDomains 中加载插件PrivateBinPath设置在他们的AppDomainSetup初始化时的对象。然而,这会导致有关编组/跨 AppDomain 通信的其他困难,特别是如果插件应该提供一些 GUI。

当安全方面的优先级较低时(非关键实用程序应用程序,由于错误插件导致崩溃时不会出现严重问题),我有以下想法:应用程序启动时,应搜索所有插件目录,并创建一个新的插件目录。应创建在其 bin 路径中包含这些目录的 AppDomain。然后,整个应用程序及其 GUI 以及所有插件都在该新 AppDomain 中运行。

在给定的情况下,是否有任何理由避免该解决方案?或者是否有任何原因导致该解决方案甚至不可行?


考虑到您所描述的情况,我不知道与您对第二个域的提案相关的任何问题。但是,您还可以通过在 addins 子目录中搜索并从那里加载程序集来研究处理初始域上的程序集加载失败的可能性Assembly.LoadFrom http://msdn.microsoft.com/en-us/library/1009fa28.aspx.

可能的设置示例,其中FindAssemblyByName必须执行以搜索所有可能的位置:

static void Main(string[] args)
{
    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

    // ...
}

static Assembly CurrentDomain_AssemblyResolve(
    object sender, 
    ResolveEventArgs e)
{
    var assemblyName = new AssemblyName(e.Name);

    string assemblyFilePath = FindAssemblyByName(assemblyName);

    if (string.IsNullOrEmpty(assemblyFilePath))
        return null;

    return Assembly.LoadFrom(assemblyFilePath);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插件 AppDomains 解决方法 的相关文章

随机推荐

  • 在没有朋友的情况下给予基类受保护的访问

    我先解释一下我的情况 我有一个基类 它自动实现一种引用计数 它允许我包装 C 风格init and free 库调用引用计数 API template
  • 将 Spring Boot 2.0 与 Tomcat 7.0.82 结合使用

    我有一个使用 Spring Boot 2 0 0 RC2 的项目 我需要使用 Tomcat 7 0 82 的传统部署将其部署到客户环境 我已经成功构建了一场可以通过配置成功部署的战争web xml以 Spring 应用程序的典型方式 使用
  • 如何从 firebug 控制台隐藏 ajax 请求?

    如何隐藏来自 firebug 控制台或任何显示 ajax 调用的 ajax 请求 请在ajax成功或失败后调用此函数 result load testtemplateboth testpagetpl clearconsole functio
  • 在指定时间后自动删除 mongodb 中的文档

    我想自动删除文档collection在 mongodb 中基于ttl 我查看了其他答案并找到了以下方法 db collection createIndex createdAt 1 expireAfterSeconds 3600 这将删除之后
  • PySpark:反序列化 eventhub 捕获 avro 文件中包含的 Avro 序列化消息

    初始情况 AVRO 序列化事件被发送到 azure 事件中心 这些事件使用 azure 事件中心捕获功能持久存储 捕获的数据以及事件中心元数据以 Apache Avro 格式写入 应使用 py Spark 分析捕获 avro 文件中包含的原
  • Google Translator API 和一个单词的多种翻译

    我正在使用 google api translate java 0 92 jar Translate setHttpReferrer http translate google com http translate google com t
  • LWJGL 窗口具有透明背景?

    我想创建一个没有 黑色背景 区域的窗口 但您可以看到任何其他打开的窗口等 也就是说 渲染场景并且仅渲染场景 不留框架 不留背景区域 我读过一种方法 该方法涉及渲染到隐藏的 OpenGL 窗口并将其缓冲在内存中 创建透明分层窗口以及从内存复制
  • 如何强制 Idea 和 Maven 下载我的项目的所有源代码?

    我的 Java 项目是使用 Maven 构建的 并在 Intellij Idea 的帮助下编写的 我有很多开源项目依赖项 我想广泛研究它们以了解它们是如何工作的 为此 我经常在 Idea 中使用用法搜索 即 查找用法 选项 它告诉我在哪里可
  • 使用 Groovy 在 Java 属性中进行变量扩展

    我经常使用标准 Java 属性文件来配置我的 Groovy 应用程序 我一直缺少的一项功能是能够使用变量作为属性值的一部分 以便它们可以在使用过程中动态扩展 我想我可以使用以下设计提供此功能 使用特殊的格式来注释应该扩展的属性 我选择将此类
  • Zookeeper 错过了连续更改的事件

    我目前有一个带有单个 Zookeeper 节点和 Curator 的设置来访问数据 读取数据是通过 Curator TreeCache 完成的 我有以下测试 public void test callback successive chan
  • GNU 链接器:适应名称修改算法的更改

    我正在尝试重新编译现有的 C 应用程序 不幸的是 我必须依赖一个专有库 我只有一个预编译的静态存档 我使用 g 版本 7 3 0 和 ld 版本 2 30 无论它是用什么 GCC 版本编译的 它都是古老的 头文件定义了方法 class fo
  • 如何将嵌入式 PostgreSQL Server Java 组件作为单独的服务使用?

    我正在尝试为基于 RESTful 服务 Java 的应用程序创建一个全面的集成测试套件 该应用程序在 Tomcat 7 x 中运行并依赖于 Postgresql 9 x 实例 此外 我希望能够将这个套件作为一个独立的进程运行 如果可能的话
  • 如何为 UILabel 指定日语编码?

    当我尝试在 iOS 上的 UILabel 中显示日语字符串时 它会使用中文编码而不是日语显示 这两个编码是nearly除少数特殊情况外 完全相同 例如 以下是字符 直 Unicode U 76F4 在中文 上 与日文 下 中的呈现方式 se
  • 在 Python 中设置系统日期(在 Windows 上)

    似乎有许多软件包用于获取 格式化当前日期 或查找从现在开始的 n 个时间间隔的日期 但我一定忽略了在 Python 中设置日期的简单方法 如 Windows 的 date exe 的存在 这样的功能肯定存在吗 我无法在 Google Pyt
  • 将字符串传递给 settimeout 是不好的做法吗?如果是,为什么? [复制]

    这个问题在这里已经有答案了 可能的重复 是否有充分的理由将字符串传递给 setTimeout https stackoverflow com questions 6081560 is there ever a good reason to
  • 无法获取动态导入的模块:

    我有一些延迟导入的 React 组件App tsx App tsx用于Index tsx它被渲染并附加到的地方body const IndexPage lazy gt import features IndexPage const Tags
  • 在 Playstore 中发布现成的 Kivy 应用程序之前的流程?

    我已经做了buildozer android debug并拥有 apk文件已安装并且工作正常 至少针对一个 两个设备进行了测试 这也是半默认的buildozer spec 例如 域名仍然是org test但随着应用程序的名称进行了调整 有了
  • 如何在可拖动和可放置之间划清界限?

    我正在使用优秀的 JQuery UI 进行 映射 以便用户可以 映射 来自一个计划的人员与来自另一计划的人员 使用这个简单的 JQuery document ready function div draggable draggable re
  • 如何在 iOS 上检测设备的方向?

    我有一个关于如何在 iOS 上检测设备方向的问题 我不需要接收更改通知 只需接收当前方向本身 这似乎是一个相当简单的问题 但我一直无法理解它 以下是我到目前为止所做的 UIDevice myDevice UIDevice currentDe
  • 插件 AppDomains 解决方法

    在处理自己的子目录中的插件程序集时 存在一个众所周知的问题 一旦这些程序集尝试从其子目录加载各自的依赖项 它们将无法加载 解决方案是在 AppDomains 中加载插件PrivateBinPath设置在他们的AppDomainSetup初始