如何在 AssemblyResolve 事件之前在运行时加载程序集?

2024-02-23

实际上,我尝试在我的解决方案中实现某种“静态链接”程序集。所以我尝试了以下方法:

  • 使用 CopyLocal = false 添加对我的程序集的引用
  • 使用“添加为链接”将 .dll 文件本身添加到我的解决方案中
  • 使用“添加资源”-“添加现有文件”将 .dll 文件本身添加到我的资源中
  • 将我的程序集中的某些类型添加到 Form1 中,如下所示private MyObject temp = new MyObject();

经过这些步骤后,我得到了预期的 FileNotFoundException 。因此,让我们尝试使用这个快速技巧在 AssemblyResolveEvent 中加载程序集

AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
    {
        Assembly MyAssembly = AppDomain.CurrentDomain.Load(Properties.Resources.ExternalAssembly);
        return MyAssembly;
    };

所以这有效!我可以从 AssemblyResolveEvent 中的资源文件加载程序集。但只有当它在其他地方找不到我的程序集时,才会发生此事件。但是我怎样才能加载我的程序集before.Net尝试搜索不同的地方?

由于事实来自检查以前引用的程序集 http://msdn.microsoft.com/en-us/library/aa98tba8.aspx我认为可以预先将程序集加载到域中,并且可以这样做。

我使用以下 Main() 方法在 program.cs 中尝试了此操作

static void Main()
{
    LoadMyAssemblies();
    AppDomain.CurrentDomain.AssemblyResolve += (sender, e) => LoadMyAssemblies();
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

private static Assembly LoadMyAssemblies()
{
    Assembly result = AppDomain.CurrentDomain.Load(Properties.Resources.MyStaticAssembly);
    return result;
}

但它仍然遇到 ResolveEventHandler。更好的是,如果我再次加载程序集并查看AppDomain.CurrentDomain.GetAssemblies()我可以看到我的程序集被加载了两次!

那么知道为什么我加载的程序集在 AssemblyResolve 事件之前加载时不会被考虑在内吗?在调试器的帮助下,当调用来自 AssemblyResolve 时,我也返回了 null,但在这种情况下,我在开始时得到了 FileNotFoundException。


以防万一你不知道,有一个工具叫做ILMerge http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx来自 MS Research,它将程序集合并到一个文件中。

您还可以使用以下命令创建多文件程序集汇编链接器工具 http://msdn.microsoft.com/en-us/library/226t7yxe.aspx.

另外,为了回答您最初的问题,我认为问题是运行时不知道您手动加载的程序集是它应该寻找的程序集。因此,在程序集解析事件中,只需将引用传回您手动加载的程序集,而不是再次加载程序集。

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

如何在 AssemblyResolve 事件之前在运行时加载程序集? 的相关文章

  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项

随机推荐

  • Bash 查找并移动名称中带有“[ ]”的文件

    我正在制作的 bash 脚本的一部分涉及 rar 分割文件 然后在完成后将分割文件移动到另一个目录 因此 如果我有一个像 test file txt 这样的文件 它首先会被 rarred 为 test file txt part1 rar
  • NumPy 排序函数返回 None

    我有一个简单的程序如下 import numpy as np arr np random randn 8 new arr sort new1 np sort arr print new print new1 我希望这两个新数组是相同的排序数
  • 计算值出现的次数

    我有一列带有重复值的文本值 我想创建一个新的唯一值列 无重复 和一个包含每个值的频率的列 最简单的方法是什么 由于行数不足 10 000 因此效率并不是太重要 为了得到答案而不是评论 请将列 例如 A 复制到 B 例如 并且仅对于 B 数据
  • 无法调用 UnsafeMutablePointer 类型的初始值设定项

    我正在尝试将字符串转换为 SHA256 哈希值 但出现下一个错误 Cannot invoke initializer for type UnsafeMutablePointer
  • 在 Eclipse 中调试 Playframework

    我刚刚从 Netbeans 迁移到 Eclipse 在 Netbeans 中 我可以开箱即用地调试 Playframework 应用程序 然而 在 Eclipse 中 似乎很难配置它来调试 Web 应用程序 具体来说是 Playframew
  • 如何点击 Selenium WebDriver 中的隐藏元素?

    我有一个显示一些记录的网格 当我单击一条记录并检查该元素时 显示它是隐藏的 但在网格中可见 我的 HTML 是 a href http 192 168 1 6 eprint prod 3 8 settings othercost add a
  • 如何更新到 mingw-gcc 4.8.2?

    我想在 c 11 中使用正则表达式 gcc 4 8 2 支持它 但 MinGW 安装程序最高仅支持 gcc 4 8 1 如何将其更新到 gcc 4 8 2 您可以自己手动安装 有一个 MinGW w64 发行版4 8 2 可在此处获取 ht
  • 赋值语句中的“others=>'0'”是什么意思?

    cmd register process rst n clk begin if rst n 0 then cmd r lt others gt 0 elsif clk event and clk 1 then cmd r lt end if
  • 如何命名 Rails 中的路线

    我有一些看起来像这样的路线 match hotels action id controller gt hotel action gt a z i id gt 0 9 i 我想用类似的东西酒店 不喜欢 路径我的代码中的某处引用了 hotels
  • 如何使用 Javascript 找出短 URL 指向的位置

    我创建了一个短网址 比如说https my short link foo 即指向https my other website bar 如何在浏览器中使用 javascript 方法检索此 url 我使用的是角度 这将取决于如何my shor
  • 删除 Facebook 评论插件下方的空白

    看看这个链接 http www equispot com horses for sale 416 向下滚动一点 您应该会看到一个 Facebook 评论插件 其下方嵌入了 Google 地图 我的问题是 评论插件的底部和地图的顶部之间有大量
  • FileInputStream 如何获取 File 的内容?

    我有一个文件f我需要把它影响成FileInputStream fs File f new File C dir foo txt FileInputStream fs FileInputStream f 但我收到这个错误 Cannot cas
  • 从 1.5 更新到 Android Studio 2.0 后,ndk 语法高亮不起作用或可能被破坏

    编辑器窗口中 C C 代码的语法突出显示在 AS 1 5 中运行良好 但从 AS 1 5 更新到 2 0 后 即使使用示例 HelloJNI 项目也无法正常工作 尝试使用保存的设置 重置默认设置以及全新下载和安装 AS 2 0 但没有任何效
  • 如何将 Assetic 用于 requireJs

    我正在尝试在 synfony2 项目中使用 require js 这是主树枝文件中的代码 文件vendor js require js已正确加载 但对于文件bundles web js main js我收到消息 未捕获的错误 模块加载超时
  • NextJS 动态路由与模态重新加载导致覆盖背景消失

    我有一个非常简单的 NextJS 应用程序 打开页面将更新 URL 但不会触发导航 而是在模式中显示内容 URL 仍然反映实际页面位置 任何刷新都会将用户带到那里 当模式打开时 我仍然希望保留页面上的原始内容在背景中淡出 并且模式应该出现在
  • 可以根据另一个单元格的值锁定单元格范围吗?

    我正在使用跟踪器来测试新的更改以及何时测试 如果新更改不适用 我不想删除它 我想禁用 并变灰 所有可用于选择完成日期的单元格 但仅限于该行 我尝试过使用以下方法 但没有任何运气 工作表上的条件格式 进行更改时执行的 VBA 代码 数据验证
  • BABEL:未知选项:base.Children

    我刚刚做了一个npm update并获得了一些新的软件包版本 这破坏了我的构建 使我无法使用默认值updateSchema js from https github com relayjs relay starter kit blob ma
  • 使用 nutch REST api 的 Nutch 弹性索引器中的未知问题

    我试图使用 REST 端点公开 nutch 但在索引器阶段遇到了问题 我正在使用 elasticsearch 索引编写器将文档索引到 ES 我使用了 NUTCH HOME runtime deploy bin nutch startserv
  • 如何通过Webpack和6to5使用带有es6模块的npm包?

    假设我想在我的项目 或任何给定的 npm 包 中使用 Immutable 我有npm install编辑了它 所以它在node modules 当然 它有 CommonJS 导出 然而 我想在我的项目中使用 es6 模块 我使用 Webpa
  • 如何在 AssemblyResolve 事件之前在运行时加载程序集?

    实际上 我尝试在我的解决方案中实现某种 静态链接 程序集 所以我尝试了以下方法 使用 CopyLocal false 添加对我的程序集的引用 使用 添加为链接 将 dll 文件本身添加到我的解决方案中 使用 添加资源 添加现有文件 将 dl