是否可以将加载的.net程序集的内容作为字节数组或流?

时间:2010-01-27 22:48:44

标签: .net reflection assemblies

是否可以将加载的.net程序集的内容作为字节数组或流?

我正在尝试做的事情类似于(当然真实场景要复杂得多,所以只是存储缓冲区不是一种选择)。

byte[] bytes = GetTheBytes();
Assembly asm = Assembly.Load(bytes);
byte[] bytes2 = GetAssemblyAsByteArray(asm);
Assert.IsTrue(bytes.SequenceEqual(bytes2));

我需要知道如何实现GetAssemblyAsByteArray函数。

编辑: 使用File.ReadAllBytes()的解决方案不够好,因为程序集可能是动态的,不,我没有(轻松)访问源(它是自动生成的,我不想跟踪它) 。序列化的注释可能有效,但我不知道如何使用它。我的最终目标是将程序集作为/ reference选项传递给csc.exe,我想到的唯一方法就是将程序集是否动态保存是将所有需要的程序集保存到临时文件中。

1 个答案:

答案 0 :(得分:1)

您可以使用:

byte[] bytes = File.ReadAllBytes(assembly.Location);

在已加载的程序集上,它会为您提供适合传递给Assembly.Load(byte[])byte[]

但是,如果最初使用Load(byte[])方法加载程序集,则其Location属性将为空字符串,这意味着此方法将无效。

看起来没有一种方法可以为所有程序集执行所需的操作。显而易见的解决方法是在您第一次获得它时存储原始byte[]