在不同的 AppDomain 中加载具有依赖项的程序集

2023-12-01

我的目标是在两个给定文件夹之间进行缺失的依赖关系检查。 想象一下以下设置。

根目录\DirA\A.dll

根\DirB\B.dll

B 取决于 A。

因此,给定这些文件夹,我想创建一个新的 AppDomain,加载 B.dll 并在该新 AppDomain 中自动解析和隔离 DirA(A.dll) 的依赖项。

隔离是这里的关键,因为当我卸载这个 AppDomain 时,我想创建一个新的 AppDomain,并可能再次将 DirA 作为依赖项,但 DirC 库需要它,因此在 DirC 也依赖于 DirB 的情况下,我希望它抛出一个例外。

编辑:添加代码示例,以帮助更好地描述我的问题。

AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = @"C:\Root";
setup.ApplicationName = "Isolated Domain"
setup.PrivateBinPath = @"DirA;DirB";
setup.PrivateBinPathProbe = "";//disable search in AppBase..
var domain = AppDomain.CreateDomain(Guid.NewGuid().ToString(),
                                    AppDomain.CurrentDomain.Evidence,
                                    setup,
                                    AppDomain.CurrentDomain.PermissionSet);
//The following statement in theory should pick B.dll's dependency from DirA.
var assembly = domain.Load(AssemblyName.GetAssemblyName(@"C:\Root\DirB\B.dll").Name);
//Do the same in a different domain for C.dll

感谢您对此的任何帮助。


这看起来像是一份工作解决事件处理程序(更多详细信息MSDN 关于解决未知程序集)

所以,你可以写类似的东西

class MyResolver
{
  public static Assembly MyResolveEventHandler( Object sender, ResolveEventArgs args )
  {
    // confirm args.Name contains A.dll
    String dllName = args.Name.Split({','}, SplitStringOptions.None)[0];
    if (dllName == "A")
    {
      return Assembly.LoadFile(@"C:\Root\DirA\A.dll")
    }
    return null;
  }
}

在您创建的域中,您将执行以下操作:

domain.AssemblyResolve += new ResolveEventHandler(MyResolver.MyResolveEventHandler);

确保在 B 中引用 A 之前绑定事件。

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

在不同的 AppDomain 中加载具有依赖项的程序集 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据

随机推荐

  • 显示无效的 SQL 类型:sqlKind = UNINITIALIZED 错误

    String s1 PasswordText4 getText String s2 ConfirmText4 getText String s3 NameText4 getText String s4 UsernameText4 getTe
  • boost::thread 数据结构大小太荒谬了?

    编译器 linux 上的 clang x86 64 我已经有一段时间没有编写任何复杂的低级系统代码了 而且我通常针对系统原语 Windows 和 pthreads posix 进行编程 所以 进出的事情已经从我的记忆中消失了 我正在与boo
  • VS Code typescript:自动实现接口

    我有一个打字稿界面 想自动实现它 我一直在环顾四周并根据这个计算器问题 and github问题 这个功能应该已经存在 但它对我不起作用 没有出现灯泡 如果接口没有必需的成员 则代码操作 快速修复将不会出现在类定义中 interface I
  • 为什么 scanf 中不需要地址运算符?

    为什么 std gt names firstName 不需要地址运算符 但是 stud gt studentid 中需要地址运算符吗 struct student struct char lastName 10 char firstName
  • adb logcat:增加最大消息长度

    似乎 logcat 截断了很长的日志消息 有没有办法防止这种情况 adb logcat g ring buffer is 64Kb 63Kb consumed max entry is 20480b max payload is 20460
  • 在unix中按文件大小排序

    我有一个 unix 文件 其中包含以下数据 35 ag 0 ca 22 0 K nt 43 8 G ct 90 0 M se 2 4 M ew 1 6 K et 0 er 0 dr 18 ld Output 43 8 G ct 90 0 M
  • 安装错误:INSTALL_FAILED_OLDER_SDK

    我是 Android 开发新手 我想首先获得Hello World应用程序正在运行 我正在使用 Eclipse IDE 和 Android 4 0 3 版本 15 SDK 我从教程网站复制了所有内容 但是当我尝试在virtual devic
  • CMake链接外部库

    首先 我是 CMake 的新手 我刚刚开始使用它 我想将外部库链接到我的项目 我使用我从中获取的代码CMake 维基 在文章末尾 这是我的 CMakeLists txt cmake minimum required VERSION 2 8
  • 如何使用检查器测试此应用实例? (没有 CoArbitrary 实例(验证 e0 [Char]))

    Checkers是一个可重用 QuickCheck 属性的库 特别是 标准类型类 如何编写一个检查器实例来测试我的验证应用实例是否有效 import Test QuickCheck import Test QuickCheck Checke
  • 如何使用 Postgresql 生成从当前日期算起的 52 周

    如何使用 postgresql 生成从当前日期算起的 52 周 例如 从 current date 即今天的日期 到 52 周 您可以使用生成系列它允许您定义范围 开始 停止 以及步骤间隔 例如 生成系列 开始日期 结束日期 stepBy
  • 如何将继承的小部件传递给整个 Material 应用程序

    所以我有一个继承的小部件 如下所示 class InheritedStateWidget extends StatefulWidget final Widget child InheritedStateWidget required thi
  • Selenium 2.53.5 httplib.BadStatusLine:''Python

    我正在尝试使用 Python 2 7 中的 Selenium 2 53 5 以在线表单自动注册序列号 该脚本已经运行了 2 个多月 但昨天我在运行它时开始收到错误 httplib BadStatusLine 有任何已知的修复方法吗 我读过前
  • 所有类方法都返回自动释放的对象吗?

    我正在重读 Mac OS X 的 Cocoa 编程 的前几章 作者指出其中之一NSCalendarDate的类方法返回一个自动释放的对象 我总是假设所有类方法都返回一个自动释放的对象 因为没有alloc涉及 是否有必须专门保留的类方法 Th
  • 当输入不匹配的字符串时,Scanf 在 while 循环中不起作用

    我正在使用一个名为的函数检查类型检查用户是否输入了有效的整数类型输入 例如 如果用户输入 15 它将打印valid15c 将打印无效 但是 如果用户仅输入字符串输入 例如ccccc 它会导致无限循环并且程序崩溃 我在下面添加了一些屏幕截图来
  • 在 $(window).load() 函数内运行 jQuery,但不在 $(document).ready 函数内运行

    我有一个现有的函数 可以使用 jQuery UI 位置插件在网页中显示图标 该函数位于 HTML 的页脚部分附近 尽管在某些地方它在头部部分输出 有人建议我在 window load 函数中加载这个 jQuery 原因是 document
  • 如何在 R 中导入 CSV 文件? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有一个 csv文件在我的工作站中 如何在 R 中打开该文件并进行统计计算 你会使用re
  • .htaccess 重写 url 到页面或目录

    对于我的网站 我有一个指向 URL 的 RewriteRulehttp www mysite com work到 work php 文件 我还有一个名为 work 的目录 其中包含文件 例如project1 php project2 php
  • cuda 上的矢量步加法速度较慢

    我正在尝试在 CUDA C 代码上运行向量步加法函数 但对于大小为 5 000 000 的大型浮点数组 它的运行速度比我的 CPU 版本慢 下面是我所说的相关CUDA和cpu代码 define THREADS PER BLOCK 1024
  • 强制 iPhone 应用程序以编程方式重新启动?

    我试图让我的 iPhone 应用程序在按下 注销 按钮时以编程方式重新启动 有人有代码示例可以分享吗 我读到可以通过修改 main m 文件来实现 但我找不到与此相关的任何代码 任何帮助 将不胜感激 Note 尽管这已被回答为 不可能 但我
  • 在不同的 AppDomain 中加载具有依赖项的程序集

    我的目标是在两个给定文件夹之间进行缺失的依赖关系检查 想象一下以下设置 根目录 DirA A dll 根 DirB B dll B 取决于 A 因此 给定这些文件夹 我想创建一个新的 AppDomain 加载 B dll 并在该新 AppD