假设在内存中创建一个(可执行的)程序集 编译代码字符串。然后我想序列化这个程序集 将对象转换为字节数组,然后将其存储在数据库中。然后稍后 我想从数据库中检索字节数组并反序列化 将字节数组返回到一个程序集对象中,然后调用该条目 装配点。
起初我只是尝试像处理 .net 中的任何其他简单对象一样执行此序列化,但显然这不适用于程序集对象。程序集对象包含一个名为 GetObjectData 的方法,该方法获取重新实例化程序集所需的序列化数据。因此,对于如何将所有这些拼凑到我的场景中,我有些困惑。
答案只需要说明如何获取程序集对象,将其转换为字节数组,再将其转换回程序集,然后在反序列化程序集上执行入口方法。
最佳答案
使用反射获取程序集字节的肮脏技巧:
MethodInfo methodGetRawBytes = assembly.GetType().GetMethod("GetRawBytes", BindingFlags.Instance | BindingFlags.NonPublic);
object o = methodGetRawBytes.Invoke(assembly, null);
byte[] assemblyBytes = (byte[])o;
说明:至少在我的示例中(程序集是从字节数组加载的)程序集实例的类型为“System.Reflection.RuntimeAssembly”。这是一个内部类,因此只能使用反射来访问它。 “RuntimeAssembly”有一个方法“GetRawBytes”,它返回程序集字节。
关于c# - 如何将程序集对象序列化/反序列化为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629799/