传递字节数组cross-appdomain

时间:2018-03-07 13:54:45

标签: c# appdomain binaryformatter

所以,只需在此处发布此信息,看看是否存在解决方案,或者我的方法是否必须重新考虑。

目前我有一个主应用程序,它创建一个子appDomain并将一个程序集加载到该appDomain中,程序集本身是动态生成的,可以包含各种可序列化的对象。

我希望能够做的是使用binaryFormatter序列化子appDomain中的对象,然后在主appDomain中对其进行反序列化,而不必将动态生成的程序集加载到我的主appDomain中。

实施例

使用代码在子appDomain中创建二进制流。

private byte[] WriteToByteArray()
{
    var stream = new MemoryStream();
    using (var writer = new System.IO.BinaryWriter(stream))
    {
        using (var ms = new System.IO.MemoryStream())
        {
            var f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            f.Serialize(ms, _value);
            var binArray = ms.GetBuffer();
            writer.Write(binArray.Length);
            writer.Write(binArray);
        }
    }
    return stream.GetBuffer();
}

然后在主appDomain

private object ReadFromByteArray(byte[] binaryArray)
{
    using (var ms = new System.IO.MemoryStream(binaryArray))
    {
        var f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        return f.Deserialize(ms);
    }
}

如果它在同一个appDomain中执行,或者生成的程序集已加载到两个appDomain中,但是在主appDomain中未加载程序集的类型中执行反序列化时将无法加载“无法加载文件或程序集”,则此代码将起作用并输入不存在

我的问题是,是否可以通过将子AppDomain指向对象类型的信息源来以某种方式反序列化byte []?

我希望我有意义

0 个答案:

没有答案