c# - 异常 : Cannot find the assembly Mynamespace , 版本=0.0.0.0,文化=中性,PublicKeyToken=null

标签 c# .net-assembly binary-deserialization

我尝试通过@TCP将图像对象作为序列化文件从客户端发送到服务器 并得到这个异常

 image exception

服务器代码

 namespace Receiver
  {
 [Serializable()]
   public class ImageSerial : ISerializable
   {
    public Image img = null;

    public ImageSerial(SerializationInfo info, StreamingContext ctxt)
    {
        img = (Image)info.GetValue("OMG", typeof(Image));
    }
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("OMG", img);
    }
}

public class ObjSerial
{
    private Stream stream;
    private BinaryFormatter bformatter;
    private string FILENAME = "m.bin";
    ImageSerial mp = new ImageSerial();

    public Image getImgFromBin()
    {

        stream = File.Open(FILENAME, FileMode.Open);
        bformatter = new BinaryFormatter();

        mp = (ImageSerial)bformatter.Deserialize(stream);
        stream.Close();
        return mp.img;
    }

客户端代码

    namespace WindowsFormsApplication5
    {
   [Serializable()]
     class ImageSerial :ISerializable
    {
    public Image img = null;
    public ImageSerial() { }

    public ImageSerial(SerializationInfo info, StreamingContext ctxt)
      { 
           img = (Image)info.GetValue("OMG", typeof(Image));
      }
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
       info.AddValue("OMG",img);
    }
}

public class ObjSerial
{
   private string FILENAME = "m.bin";
   private TcpClient tcpClient;
   private FileStream fstFile;
   private NetworkStream strRemote;
   private string SERVERIP = "10.102.239.207";
   private int SERVERPort = 5051;

    public  void start(Image ims)
    {

        ImageSerial mp = new ImageSerial();
        mp.img = ims;

        Stream stream = File.Open(FILENAME, FileMode.Create);
        BinaryFormatter bformatter = new BinaryFormatter(); 

        bformatter.Serialize(stream, mp);
        stream.Close();

        //Clear mp for further usage.
        sendFile();



       }
       private void ConnectToServer(string ServerIP, int ServerPort)
       {  
        tcpClient = new TcpClient();
        try
        { 
            tcpClient.Connect(ServerIP, ServerPort);
        }
        catch (Exception exMessage)
        {
            // Display any possible error
        }
    }

    private void sendFile()
    {

        ConnectToServer(SERVERIP, SERVERPort);
        if (tcpClient.Connected == false)
        { 
            ConnectToServer(SERVERIP, SERVERPort);
        } 
        strRemote = tcpClient.GetStream();
        fstFile = new FileStream(FILENAME, FileMode.Open, FileAccess.Read);

        int bytesSize = 0; 
        byte[] downBuffer = new byte[2048];

        while ((bytesSize = fstFile.Read(downBuffer, 0, downBuffer.Length)) > 0)
        {
             strRemote.Write(downBuffer, 0, bytesSize);
        }
        tcpClient.Close();
        strRemote.Close();
        fstFile.Close();


    }
    }

我读过很多关于此异常的主题,它们都讨论了两种解决方案

  • 格式化程序.Binder
  • AppDomain.CurrentDomain.AssemblyResolve

但还是不行

最佳答案

服务器端当然不会找到客户端程序集。但它不应该。您的客户端代码不得位于服务器端。这里的问题是您定义了 ImageSerial 类两次,一次在服务器中,一次在客户端中。如果你控制双方,那就完全错误了。创建一个由客户端和服务器引用的公共(public)程序集,并将公共(public)类放在那里。

此外,删除从服务器到客户端的所有引用。如果您愿意,应该采用其他方式绑定(bind),或者使用中间服务层,例如 WCF。

关于c# - 异常 : Cannot find the assembly Mynamespace , 版本=0.0.0.0,文化=中性,PublicKeyToken=null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13316557/

相关文章:

c# - 通过网络发送 C# 程序集/DLL?

c++ - 在 C++ 中实现地址albe字段的最佳方法是什么?

C# - DOT 语言的解析工具

c# - MessageBox.Show() 的问题

c# - Asp.NET MVC 模型绑定(bind) - 使用绑定(bind)参数属性为简单类型分配前缀

c# - C#序列化-找不到程序集

c# - 如何使用 Binaryformatter 在 C# 中将 2D 二进制对象转换为 Dictionary<string, object>

c# - 使用 google chrome c# 在 winform 中进行 Web 浏览器控件

c# - 无需解包即可从存档中获取程序集文件版本

asp.net-core - 如何更改asp.net核心中的程序集信息?