dbo*_*nes 14 c# reflection assemblies
我想通过以下方式加载程序集
var loadedAssembly = Assembly.Load(File.ContentsAsBytes);
File.ContentAsBytes byte[]通过以下方式将dll作为a返回
System.IO.File.ReadAllBytes("dll location");
问题是加载的程序集(loadedAssembly)失去了它的物理位置
有没有办法从a加载byte[]并获得类似的结果,Assembly.LoadFile因为我需要使用结果来处理AppDomain.CurrentDomain.AssemblyResolve
字节数组byte[]只是内存中的字节流.它与任何文件都没有任何关联.该字节数组可以从文件中读取,从Web服务器下载,或由随机数生成器自发创建.没有额外的数据"随之而来".
如果要维护最初从中读取字节数组的文件位置,则必须在另一个变量中单独维护该数据.无法将额外数据"附加"到byte[]变量.
当您使用Assembly.Load将字节数组加载为程序集时,它无法知道该字节数组的来源,因为该额外数据未提供给该Load函数.
作为一种解决方法,有没有办法可以将字节数组保存到临时文件中,用于Assembly.LoadFile为您提供所需的数据并将其链接Location回原始字节数组?
一旦将 传递byte[]给Assembly.Load方法,该字节数组就绝对没有任何信息甚至无法提示该Load方法它来自哪里 - 它只是一堆字节。如果您将文件复制到单独的位置,同样适用:
File.Copy(dllLocation, anotherLocation);
var asm = Assembly.LoadFile(anotherLocation);
Run Code Online (Sandbox Code Playgroud)
anotherLocation即使程序集最初已打开,程序集位置仍将指向dllLocation。类似地,当您加载程序集字节(实质上是将程序集从磁盘复制到内存)时,这些字节的“位置”现在就是内存。
| 归档时间: |
|
| 查看次数: |
2640 次 |
| 最近记录: |