100分求助。提示无法找到程序集。我明白了是因为“应用程序和类库的命名空间可能是不一样的,所以提示找不到程序集”,但是具体的操作是怎么操作的呢?才能反序列化成功呢?我按照下面牛人的方法试过了,但是不行。我不知道为什么。最好能详细一点,不要只是讲原理,小弟在此谢过了!http://blog.csdn.net/scgyyu/archive/2009/06/01/4232371.aspx

解决方案 »

  1.   


    小弟是这么写的: public static object Deserialize(byte[] data)
            {
                IFormatter formatter = new BinaryFormatter();
                formatter.Binder = new UBinder();
                MemoryStream stream = new MemoryStream(data);            //这里的错误:无法找到程序集
                object obj = (object)formatter.Deserialize(stream);
                return obj;
            } 上面是反序列化的代码
     public static byte[] Serialize(object obj)
            {
                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                System.IO.MemoryStream stream = new System.IO.MemoryStream();
                formatter.Serialize(stream, obj);
                byte[] data = stream.GetBuffer();
                return data;
            }上面是序列化的代码
      

  2.   

    最初我是这么写的: public static object Deserialize(byte[] data)
            {
                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                System.IO.MemoryStream stream = new System.IO.MemoryStream(data);
                data = null;
                Object obj = formatter.Deserialize(stream);
                return obj;        }也是从网上找的代码。
      

  3.   

    DLL移至BIN文件夹
    后期动态加载确定AppDomain 中的所有可用程序集中包括要使用的类型
      

  4.   

    你的回答看起来很专业,而且好多勋章。我看到了可以使用dll来解决的方法。但是怎么写dll?在vs里新建一个dll的项目,写好了我需要的类之后我就不知道再怎么处理了。您能给我详细的讲一下我该怎么做吗?谢谢了
      

  5.   

    还有就是,这个dll具体要怎么写呢?我也不是很懂。能给我也讲一下啊。谢谢了。
      

  6.   

    你好。我做的是一个基于socket的客户端和服务器通信的。用到序列化和反序列化。我在客户端序列化之后在服务器端反序列化。按照您说的不行啊。因为在写代码的时候不可以引用另外一个项目的程序集的吧???我这个不是很清楚,如果这样做可以的话希望您能指点我一下。
      

  7.   

    你服务器端装.net Framework了么?
      

  8.   

    你的代码 没有问题,只是类所在的dll 没在服务器端因为你序列化的是客户端的类,服务器不认识
      

  9.   

    估计是某个类型的程序集丢失了吧,我这里有个序列化的代码
    以及反序列化代码,你看一下有没有用 /// <summary>
    /// XML序列化对象
    /// </summary>
    /// <param name="Instance"></param>
    /// <returns></returns>
    public static string ObjectToXML( Object Instance )
    {
    MemoryStream stream = null;
    TextWriter writer = null;
    string ObjectXml = string.Empty;
    try
    {
    stream = new MemoryStream(); // read xml in memory
    writer = new StreamWriter( stream, Encoding.UTF8 ); Type t = Instance.GetType();
    XmlSerializer serializer = new XmlSerializer( t ); XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
    xsn.Add( string.Empty, string.Empty ); serializer.Serialize( writer, Instance, xsn ); 
    int count = ( int )stream.Length; 
    byte[] arr = new byte[count];
    stream.Seek( 0, SeekOrigin.Begin );
    stream.Read( arr, 0, count );
    UTF8Encoding utf = new UTF8Encoding();
    ObjectXml = utf.GetString( arr ).Trim();
    }
    catch ( Exception ex )
    {
    string ss = ex.Message;
    }
    finally
    {
    if ( stream != null && stream.Length > 0 )
    {
    stream.Close();
    }
    if ( writer != null )
    {
    writer.Close();
    }
    } return FormatXml( ObjectXml );
    } /// <summary>
    /// 反序列化XML字符串
    /// </summary>
    /// <param name="xml">xml data of employee</param>
    /// <returns></returns>
    public static object XMLToObject( string xml, Type t )
    {
    StringReader stream = null;
    XmlTextReader reader = null;
    Object o = null;
    try
    {
    XmlSerializer serializer = new XmlSerializer( t );
    stream = new StringReader( xml );
    reader = new XmlTextReader( stream );
    o = serializer.Deserialize( reader );
    }
    catch{}
    finally
    {
    if ( stream != null )
    {
    stream.Close();
    }
    if ( reader != null )
    {
    reader.Close();
    }
    } return o;
    }
      

  10.   

    您好。您说的“类所在的dll 没在服务器端因为你序列化的是客户端的类,服务器不认识”,这个是什么意思?我把客户端的那个User的类原封不动的写成为一个dll,放在服务器端的bin下就可以了吗?谢谢您了。
      

  11.   

    对 
    你客户端和服务端先用一个  看看行不行   就是必需dll丢了的缘故
      

  12.   

    你好。还在吗??我把我的User类的所有的代码写到一个dll项目中。然后点击的生成->重新生成,这样生成了一个dll,然后拷贝到了服务器端的bin文件夹下。这样我启动了服务器,再用客户端序列化,在服务端反序列化的时候还是那个问题。您还能给我说一下吗?是哪里的问题
      

  13.   

    服务器端要添加那个DLL的引用 
      

  14.   

    你把要序列化的类  也就是 User 类 放在一个单独的项目中 也就是 类库项目中,然后 生成项目。客户端 也引用 该类库省生成的 dll
      

  15.   

    哦看来是我没添加。这个该怎么添加呢?是using语句吗?该怎么写呢?
      

  16.   

    恩。这个我明白了。但是写好了怎么添加引用呢?在我的客户端和服务器端怎么写???是using语句吧?
      

  17.   

    在引用中添加引用DLL文件
      

  18.   

    在你的项目上右键, 选择添加引用  然后 找到相应的dll
      

  19.   

    我是这样做的。点击  引用->添加引用->找到刚刚建立的User的那个项目->找到debug目录的那个dll。结果悲剧了。还是不行。还是刚刚的那个错误哭
      

  20.   

    我是这样做的。点击 引用->添加引用->找到刚刚建立的User的那个项目->找到debug目录的那个dll。结果悲剧了。还是不行。还是刚刚的那个错误哭
      

  21.   

    我还需要做其他的什么工作吗?比如说那个dll的名字有没有什么特殊的限制?或者是其他的什么
      

  22.   

    你现在客户端 也是引用的 dll 么
      

  23.   

    对了。我想起来一个问题。我写了dll之后我的客户端还需要再写那个User的类吗?应该不需要了吧?
      

  24.   

    恩 我在客户端也引用了那个dll了都弄了一个晚上了
      

  25.   

    你好。我的问题您还有什么好的办法吗?我写了dll,也在客户端和服务器端都添加了引用。在客户端和服务器端我还需要写这个User类吗?可是如果不写的话VS会提示找不到这个类。用using语句我也不知道具体怎么用。应该是没有写using而引起的吧?您知道怎么写吗?
      

  26.   


    参照这个,同时注意命名空间在项目中 添加引用 后使用如果有命名空间 使用 using 导入相应命名空间即可
      

  27.   

    我昨天晚上快一点的时候终于成功了。由于一个帖子同一个人不能连续回帖三次,就没结贴。错误原因如下:错误在于我建立的dll项目的名字是ClassLib,我生成dll之后又把ClassLib.dll的名字改为了User.dll,结果就还是那个错误。改回来就好了。谢谢大家了。这个帖子也是后来人的一堂好课!!!
      

  28.   

    哈哈哈哈哈,解决了我的问题啊。感谢楼主好帖,感谢csdn提供这个平台,感谢电信,感谢祖国haha