|
|
|
C# Непонятки с сериализацией
|
|||
|---|---|---|---|
|
#18+
Добрый день! Имеется проектируемая "головная" программа и модули, которые я постепенно отлаживаю и добавляю в нее. Отладка модулей ведётся отдельно от головной, поскольку в головной вести отладку довольно тяжело. Однако, головная должна поставлять данные для отлаживаемого модуля. Вроде бы решение на поверхности - в головной формирую необходимые данные, записываю в двоичный файл (эти данные - экземпляр класса RabotnikClass ), а затем в отлаживаемом модуле читаю их столько, сколько нужно, пока модуль не заработает правильно. Для передачи двоичных файлов данные необходимо сериализовать - вроде бы это нетрудно. Вот фрагменты кода: Запись в головной программе // ************** Для отладки ************************************************** string myFileName = @"C:\Users\m25.POIPKRO.000\YandexDisk\A Visual Studio 2010\$$FileClassRabotnik.bin"; Stream myFileStream = File.Create(myFileName); BinaryFormatter serializer = new BinaryFormatter(); serializer.AssemblyFormat = FormatterAssemblyStyle.Simple; // Не помогает!!! serializer.Serialize(myFileStream, currentRabotnik); // currentRabotnik - это экземпляр класса RabotnikClass myFileStream.Close(); // ****************************************************************************** Чтение в отдельном отлаживаемом модуле // ********************************************* Для отладки ******************************************* RabotnikClass currentRabotnik = new RabotnikClass(); // Эти данные и пытаюсь принять string myFileName = @"C:\Users\m25.POIPKRO.000\YandexDisk\A Visual Studio 2010\$$FileClassRabotnik.bin"; if (File.Exists(myFileName)) { Stream myFileStream = File.OpenRead(myFileName); // Открываем поток, файлом на чтение BinaryFormatter deserializer = new BinaryFormatter(); /* Создаём двоичный форматтер, который * будет превращать поток бит в нормальный * объект - в нашем случае экземпляр * класса RabotnikClass */ deserializer.AssemblyFormat = FormatterAssemblyStyle.Simple; try { currentRabotnik = (RabotnikClass)deserializer.Deserialize(myFileStream); // Чтение файла FileName в потоке TestFileStream } catch (Exception ee) { MessageBox.Show(ee.ToString()); }; myFileStream.Close(); // Закрытие потока - обязательно! }; // ********************************************* Для отладки ******************************************* Формирование файла $$FileClassRabotnik.bin происходит нормально, однако попытка чтения приводит к исключению System.Runtime.Serialization.SerializationException: Не удалось найти сборку "TreeNodePOIPKRO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null". в System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly() То есть, в отлаживаемый модуль подавай ей сборку головной программы!!! ... = FormatterAssemblyStyle.Simple - не помогает. Как от этого избавиться!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2013, 15:40 |
|
||
|
C# Непонятки с сериализацией
|
|||
|---|---|---|---|
|
#18+
Есть ли отдельная сборка где есть общий RabotnikClass на который ссылаются программа и модуль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2013, 16:21 |
|
||
|
C# Непонятки с сериализацией
|
|||
|---|---|---|---|
|
#18+
F#Есть ли отдельная сборка где есть общий RabotnikClass на который ссылаются программа и модуль? Ну, да! Этот класс как раз и присутствует в сборке TreeNodePOIPKRO откуда я и пытаюсь передать данные экземпляра данного класса через файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2013, 20:06 |
|
||
|
C# Непонятки с сериализацией
|
|||
|---|---|---|---|
|
#18+
ValGer, Поэкспериментировал и обнаружил, что без ссылки на сборку головной программы в отлаживаемом (отдельном) модуле никак не обойтись. В этом (моём частном случае) это помогло - всё заработало как надо. Но как быть, если файл формируется в одной программе, записывается на дискету, перносится в другое место и пытается быть прочитанным другой программой, в которой о сборке формирующей этот файл программы нет "ни гу-гу"?! Не понимаю! С обычными текстовыми файлами никаких таких заморочек нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 17:24 |
|
||
|
C# Непонятки с сериализацией
|
|||
|---|---|---|---|
|
#18+
ValGer, Вы можете в коде модуля написать new RabotnikClass() и модуль скомпилируется? Вынесите бизнес-объекты и классы для специализации в сборку(и) отдельную(ые) от головной и модулей и подклюяайте, если нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2013, 13:22 |
|
||
|
C# Непонятки с сериализацией
|
|||
|---|---|---|---|
|
#18+
skyANA, Ну, да - примерно так я и поступил. Но вопрос-то принципиальный - зачем двоичный файл, от которого ничего больше не требуется кроме хранения данных "зас-тся" ещё и информацией о сборке, в которой он сформирован? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2013, 23:00 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38143739&tid=1341922]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 510ms |

| 0 / 0 |
