Roger500 Ответов: 1

Как передать объект в другую программу?


У меня возникли проблемы с передачей сериализованного объекта из одной программы в другую.

Эти две программы компилируются в одном решении и выполняются на одном компьютере. Источник объекта находится в общей папке в том же решении.
Программа а сериализует объект и записывает его в именованный канал.
Программа B считывает сериализованный объект из именованного канала и пытается присвоить де-сериализованный объект тому же типу объекта.

Я получаю следующую ошибку:

[A]FileFind.Поиск файлов.Shared.cs.CMUtilitySchedule не может быть приведен к [B]FileFind.Поиск файлов.Shared.cs.CMUtilitySchedule.
Тип A берется из 'FileFind, Version=5.0.0.6, Culture=neutral, PublicKeyToken=null' в контексте 'Default' at location 'I:\RogerFolders\Documents\Visual студия 2013\Projects\Test\FileFind\FileFind6000\FileFind\FileFind\bin\Debug\FileFind.exe".
Тип B происходит от 'FileFindCM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' в контексте 'Default' at location 'I:\RogerFolders\Documents\Visual студия 2013\Projects\Test\FileFind\FileFind6000\FileFind\FileFind\bin\Debug\FileFindCM.exe".

Как я могу передавать объекты другой запущенной программе через канал?

Что я уже пробовал:

Я думаю о создании функции в объекте, которая создаст поток CVS или XML. Затем я бы сериализовал полученный поток и отправил его в другую программу. Однако это был бы неинтуитивный кошмар обслуживания.

Другие предложения будут приветствоваться.

1 Ответов

Рейтинг:
8

Kornfeld Eliyahu Peter

Смотрите этот случай:

// project for A.exe
namspace A {
  public class FileFind {
    // ...
  }

  class A {
    public static void Main(string[] args) {
      // using FileFind...
    }
  }
}

// project for B.exe
namspace B {
  public class FileFind {
    // ...
  }

  class B {
    public static void Main(string[] args) {
      // using FileFind...
    }
  }
}

В этом случае существует два разных типа даже FileFind имеет точно такой же код в проектах A и B...
Чтобы решить эту проблему, вы должны переместить FileFind в третий проект и ссылаться на него как из A, так и из B
// project for F.dll
namspace F {
  public class FileFind {
    // ...
  }
}

// project for A.exe
using F;

namspace A {
  class A {
    public static void Main(string[] args) {
      // using F.FileFind...
    }
  }
}

// project for B.exe
using F;
namspace B {
  class B {
    public static void Main(string[] args) {
      // using F.FileFind...
    }
  }
}