2013-05-05 5 views
0

Я улучшаю существующий проект WPF с протоколом TCP/IP, который отправляет и принимает небольшие объекты. Я использую Visual Studio 10, но я застрял. Я использую BinaryFormatter для сериализации объектов, и до тех пор, пока я не использовал для отправки и получения с двумя классами в одном проекте, у меня не было проблем, но когда я разделял слушателя и отправителя (TCPListener и TCPCLient) во время выполнения, у меня была эта ошибка: «Не удается найти Assembly 'ProjectName, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'".Visual Studio WPF Assembly и решение DLL

Googling Я выяснил, что проблема может быть решена путем создания внешней dll, вызванной из основной программы, но я не знаю, как передать MainWindow в dll, потому что библиотека даже не может найти типы WPF (такие как MainWindow , Combobox или текстовое поле)

Помогите мне с этой проблемой dll или у вас есть какие-либо идеи для решения проблемы с ссылкой на сборку?

ответ

0

Прежде всего, вы не должны передавать MainWindow классу, который вы собираетесь сериализовать. Этот класс данных не должен иметь никаких зависимостей от GUI. Фактически, если вы хотите сериализовать класс, его открытый интерфейс должен, по моему мнению, содержать только примитивные типы или классы, определенные в одной и той же сборке.

Однако для быстрого исправления, и если вы не хотите полностью переписывать проект, я обнаружил, что самый простой способ получить зависимости для библиотеки библиотеки WPF - это запустить новый проект приложения WPF, а затем изменить его тип проекта в библиотеку классов WPF на вкладке приложения свойств проекта.

+0

Спасибо за ответ. Я следовал вашим советам, но я понял, что проблема была в другом месте. Я читал, что для десериализации требуется одна и та же подпись dll для форматирования, поэтому я создал внешнюю dll, которая предлагает построить BinaryFormatter и экспортировать его в каждый путь программы. Таким образом, каждый экземпляр приложения будет находить одну и ту же подпись на BinaryFormatters и выполнять сериализацию/десериализацию в «безопасном» режиме. Я нахожу это немного сложным (почему бы не разрешить вынужденную десериализацию), но решил. Спасибо за доступность! – user2351528

Смежные вопросы