使用 Assembly.LoadFrom 和 Assembly.Load 混合加载程序集时的奇怪行为

2023-11-27

使用混合加载程序集时的奇怪行为Assembly.LoadFrom and Assembly.Load:

我在加载程序集时遇到了奇怪的行为Assembly.LoadFrom稍后与Assembly.Load。 我正在使用加载程序集Assembly.LoadFrom,其中程序集位于一个文件夹中,该文件夹不是执行文件夹。

稍后在我的测试代码中,当我尝试再次加载此程序集时Assembly.Load,负载失败并显示System.IO.FileNotFoundException(“无法加载文件或程序集...”)尽管程序集已经加载。强名称和非强名称的加载都会失败(再次加载此程序集的原始原因是使用BinaryFormatter).

但是,如果程序集位于执行文件夹中,则在使用强名称和非强名称的两种情况下,稍后加载都会成功。在这种情况下,您可以看到从两个不同的位置加载了两个相同的程序集。

重现此问题的简单代码示例:

Assembly assembly1 = Assembly.LoadFrom(@"C:\a.dll");

// Loading with a strong-name fails
Assembly assembly2 = Assembly.Load(@"a, Version=1.0.0.0, Culture=neutral, PublicKeyToken=14986c3f172d1c2c");

// Also loading with a non-strong fails
Assembly assembly3 = Assembly.Load(@"a");
  1. 有什么解释为什么 CLR 会忽略已经加载的程序集吗?
  2. 知道如何缓解这个问题吗?

这并不奇怪。根据文档,使用 Load 和 LoadFrom 加载会将程序集放置在不同的上下文中。This可能有帮助。

  1. 有什么解释为什么 CLR 会忽略已经加载的程序集吗?

因为他们所处的环境不同。

  1. 知道如何缓解这个问题吗?

从相同的上下文加载,或者帮助 CLR 找到程序集,可能通过将处理程序附加到AppDomain.AssemblyResolve.

选择

如果您加载程序集的位置是 AppDomain.BaseDirectory 下的子文件夹,您只需向 App.config 添加一个条目:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

http://msdn.microsoft.com/en-us/library/823z9h8w.aspx

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

使用 Assembly.LoadFrom 和 Assembly.Load 混合加载程序集时的奇怪行为 的相关文章

随机推荐

  • 在 matlab 中绘制一堆 3d 线的最有效方法

    我需要在 matlab 中绘制 3d 线列表 最快的方法是什么 我目前正在做类似的事情 edges is a MX2 matrix holding the list of edges points are the vertices coor
  • 在php/mysql中导入带有图像的excel文件

    我想制作一个导入脚本 允许用户将他们的 excel 文件 扩展名不重要 上传到我的 php 应用程序 应用程序应该识别一个项目列表 到目前为止一切顺利 这种情况下的困难在于 Excel 文件包含图像 我已阅读有关 phpexcel 库的信息
  • 使用 HTML5 将 1000 条记录插入 sqlite 时如何加快处理速度

    我是 HTML5 应用程序开发新手 在此 我想使用 HTML5 将 1000 条记录插入到 sqlite 数据库中 这个过程非常缓慢 如何在插入记录之前使用 BEGIN COMMIT 这样可以加快插入速度 请任何人指导我 提前致谢 请在ch
  • 反编译 APK 并在您的应用程序中使用其部分代码是否合法

    反编译 apk 并使用其部分代码是否合法 更具体地说 一个 URL 连接器 我还没学过 应用程序的其余部分 布局等 是我制作的 我可以发布此应用程序而不用担心法律问题吗 不管骗子说什么 反编译绝对合法 最多 您可能会因与软件相关的未经授权的
  • MySQL 是否有与 PHP 的 preg_replace 等效的工具?

    我有一个匹配 MySQL 中的字段 我认为我可以使用正则表达式 但 MySQL 似乎没有完成这项工作所需的功能 这是场景 我在 PHP 中有一个名为 url 的变量 假设此变量设置为字符串 article my article page 2
  • 最大化并行请求数 (aiohttp)

    tl dr 如何最大化可以并行发送的 http 请求数量 我正在从多个网址获取数据aiohttp图书馆 我正在测试它的性能 我发现在这个过程中的某个地方存在瓶颈 一次运行更多的网址并没有帮助 我正在使用这段代码 import asyncio
  • KineticJS 中的缩放和平移

    有没有一种方法可以使用 KineticJS 在画布上进行缩放和平移 我找到了这个图书馆Kineticjs视口 但只是想知道是否有其他方法可以实现这一目标 因为这个库似乎使用了很多额外的库 并且不确定哪些库是完成工作所绝对必需的 或者 我什至
  • Java 二进制兼容性问题:sun.font.FontManager 类变成接口

    我正在使用Lobo Java Web 浏览器库 它给了我一个例外 经过一些研究 我确定可能是由于该库是针对旧版本的 Java 进行编译的 代码如下 import java io IOException import org lobobrow
  • 特定时间和日期的 JavaScript 倒计时

    我正在使用 jQuery 插件将倒计时器放入我的网页中 目前控制计时器显示内容的代码是 插件的 JS 可以在这里查看 https github com objectivehtml FlipClock blob master js flipc
  • Flutter:TextEditingController 数组

    设置数组的最佳方法是什么TextEditingController扑扑中 我的意思是我需要获取一个值数组Textfield 1 到 n 值并发送到服务器 谁能帮助如何实现这一目标 I tried for int i 1 i lt 75 i
  • if(CONST==variable) 或 if(variable==CONST) 有什么区别?

    比较运算符的顺序有区别吗 define CONST VALUE 5 int variable if variable CONST VALUE Method 1 OR if CONST VALUE variable Method 2 这仅仅是
  • 抑制标准 ML 中的“val it”输出

    我正在用标准 ML SML NJ 编写一个 脚本 根据我的喜好设置交互式环境 该脚本所做的最后一件事是打印一条消息 表明一切顺利 本质上 最后一行是这样的 print SML is ready n 当我运行脚本时 一切顺利 但 SML 解释
  • 如何使用包含文件(例如 .css)的相对路径

    我有一个header php文件包含一个 css文件链接 当我 包含 时header php到不同文件夹中的另一个 php 文件中 css对此的 hrefheader php对于新的 php 文件来说不正确 我该如何申报href in my
  • 在 ReactJS 中更新数组中的对象的最佳方法是什么?

    如果您有一个数组作为状态的一部分 并且该数组包含对象 那么通过更改其中一个对象来更新状态的简单方法是什么 示例 根据react教程修改 var CommentBox React createClass getInitialState fun
  • var self = this; 是吗?一个糟糕的模式?

    我发现自己需要 var self this 我的 javascript 类 中有很多内容 虽然这种做法很常见 但感觉有点不对劲 我希望在这个问题中找到一种更好的方法来处理这个问题 或者让我相信这没什么问题 这是保持正确绑定的标准方法吗 我是
  • 在java中发送电子邮件时抛出javax.mail.AuthenticationFailedException

    我是java初学者 我想用java发送电子邮件 因为我在Java中使用这段代码 但我的代码抛出了异常 我需要注意为什么 这是异常的堆栈跟踪 javax mail AuthenticationFailedException 534 5 7 1
  • cakephp 一种表单,多个模型,不显示一个模型的验证消息

    我有一个注册表单 我正在用户和身份表中创建一条记录 用户有许多身份 表格看起来像这样 fieldset legend legend fieldset
  • Sql SMO:如何获取数据库物理文件名的路径?

    我正在尝试返回数据库的 mdf ldf 文件的物理文件路径 我尝试使用以下代码 Server srv new Server connection Database database new Database srv dbName strin
  • Chrome 渲染颜色的方式与 Safari 和 Firefox 不同

    由于某种原因 Chrome 将 FF3A00 渲染为 FF0000 我包含了来自的屏幕截图jsfiddle来说明这一点 色度计报告的颜色 以及我看到的颜色 与 CSS 所说的颜色不同 其他颜色也会发生这种情况 例如 FFAF00 根据色度计
  • 使用 Assembly.LoadFrom 和 Assembly.Load 混合加载程序集时的奇怪行为

    使用混合加载程序集时的奇怪行为Assembly LoadFrom and Assembly Load 我在加载程序集时遇到了奇怪的行为Assembly LoadFrom稍后与Assembly Load 我正在使用加载程序集Assembly