我想通过以下方式加载程序集
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/