c# - 按字节加载程序集会丢失位置

标签 c# reflection assemblies

我想通过以下方式加载程序集

var loadedAssembly = Assembly.Load(File.ContentsAsBytes);

File.ContentAsBytes 通过以下方法将 dll 作为 byte[] 返回

System.IO.File.ReadAllBytes("dll 位置");

问题是加载的程序集 (loadedAssembly) 丢失了它的物理位置

  • loadedAssembly.CodeBase - 设置为加载它的程序集(这是不正确的)
  • loadedAssembly.Location - 为空

有没有办法从 byte[] 加载并获得与 Assembly.LoadFile 类似的结果,因为我需要结果与 一起使用AppDomain.CurrentDomain.AssemblyResolve

最佳答案

字节数组byte[] 只是内存中的字节流。它与任何文件都没有关联。该字节数组可以从文件中读取、从 Web 服务器下载或由随机数生成器自发创建。没有“随之而来”的额外数据。

如果要维护最初读取字节数组的文件位置,则必须在另一个变量中单独维护该数据。无法将额外数据“附加”到 byte[] 变量。

当您使用 Assembly.Load 将字节数组作为程序集加载时,它无法知道该字节数组来自何处,因为没有向 提供额外的数据加载函数。

作为解决方法,有没有一种方法可以将字节数组保存到临时文件中,使用 Assembly.LoadFile 为您提供所需的数据并链接 Location 回到原来的字节数组?

关于c# - 按字节加载程序集会丢失位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597138/

相关文章:

serialization - WF 自定义 SQL 跟踪服务停止为旧工作流工作?

javascript - 禁用的选中复选框未发送到表单提交时的模型

c# - 动态事件订阅和 1 个处理程序

c# - 从 Action<T> 的实例中获取 Invoke MethodInfo 的最安全方法

ruby - Ruby 中的内省(introspection)

.net - .NET 程序集会改变吗?

c# - 从 GAC 或其他地方浏览/选择程序集

c# - C++ 到 C#,static_cast 到枚举

c# - 如何使用 LINQ 查找列表中下一个匹配元素的索引

C# XNA 2D 平台跳跃逻辑