BinaryFormatter的不能在C#中找到反序列化“大会”(BinaryFormatter c

2019-08-03 21:27发布

我有一个程序,序列化和反序列化电话,当我尝试我的DLL附加到另一个程序,它说: Unable to find assembly 'ASCOM.BHOProxy.Connector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=74643865492aa2e6'.

我能理解,如果这是一个参考的问题什么的,但问题是,抛出异常的代码 ASCOM.BHOProxy.Connector 。 我想用某种第三方串行器的去,但我不知道如何使用什么。 该组件由通过所述应用程序加载的另一个DLL加载。

串行化的数据被跨越一个TCP连接到一个相同的连接器(通常由另一程序加载相同的文件中),在那里它被反序列化传输。 当它试图反序列化的异常被抛出,但它只做它时,这是从外部程序调用。 在Visual Studio调试时,它工作正常。

Their Program --(late binding)--> My Main DLL --(.NET Project Reference)--> My Connector DLL

堆栈跟踪:

   at System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly()
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name)
   at System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable)
   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)
   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)
   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)
   at Connector.PortComProxy.DecodeMessage(List`1 buff) in c:\Users\Arlen\Documents\Visual Studio 2012\Projects\DriverProxy\PortComClient\PortComProxy.cs:line 259

Answer 1:

我不能说,为什么组件没有有时发现。 不过,我已经使用了AppDomain.AssemblyResolve事件来加载无法通过.NET提供正规的组装负荷分辨率可以找到组件。 在我的情况,那是因为我必须找到一个注册表项的装配,使用我能找到并加载程序集预防大会未发现异常情况。

至少,攻到这一事件可能让您验证的BinaryFormatter试图解决什么类型。



Answer 2:

非常感谢你肯,即做到了。 这里是我做了别人谁可能需要它。 我不知道这有什么差别解析器是静态的还是没有。

using System.Reflection;
...
public class MyClass{
    public MyClass()
    { 
        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
    }
    private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
    {
        return typeof(MyClass).Assembly;
    }
}


文章来源: BinaryFormatter can't find 'Assembly' upon deserialize in c#
标签: c# .net-4.0