2010-10-11 6 views
0

У меня есть приложение Silverlight, размещенное в проекте ASP для веб-роли Azure. Проект ASP предоставляет службу WCF.Печаль с объектами передачи данных в Silverlight/WCF

Я хотел бы иметь один набор определений классов для типов данных. Кто-то рекомендовал сделать третий проект (библиотеку классов) и добавить ссылку на него из SL и ASP. Я начал это делать, но проект Silverlight жаловался, что вы можете добавлять ссылки только на проекты Silverlight.

Затем я создал библиотеку классов Silverlight и переместил классы данных. Однако я добавляю некоторые DLL-ссылки, например, клиенту Windows Azure. Тогда библиотека классов Silverlight говорит мне, что я могу только добавить ссылки на Silverlight 4-friendly .dlls, из которых Windows Azure не один. Фантастика.

Есть ли что-то, что я могу сделать, чтобы обойти это, или я придерживаюсь менее элегантного, избыточного решения?

ответ

0

Посмотрите, подходит ли связанный файл в соответствии с this answer.

+0

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

+0

@Ros - простой: вы создаете новую библиотеку классов Silverlight, но вместо копирования файлов, содержащих определения объектов данных, вы добавляете их в качестве связанного файла. Это означает, что у вас есть тот же исходный файл для ваших проектов ASP.NET и Silverlight. Одни и те же файлы, которые вы открыли через проект Silverlight, чтобы ваше приложение SL могло ссылаться на них. – slugster

1

Multi-targeting - ваш лучший выбор. Существует статья объяснить это в Visual Studio от Microsoft по адресу: http://msdn.microsoft.com/en-us/library/ff921092(PandP.20).aspx

В принципе, вы создаете как ваши Silverlight и стандартный класс .NET библиотеки, каждый с другим именем, а затем включают одни и те же файлы в каждом. Обычно файлы фактически находятся только в одной из библиотек классов, а затем софт-связь во втором.

Ключом является обеспечение совместимости кода в ваших файлах с обеими командами. Если для некоторых ваших методов требуется отдельная реализация в зависимости от времени выполнения, вам необходимо отделить их от прагм (например, #ifdef SILVERLIGHT ...).

Если вы только создаете структуры данных, не должно быть никаких проблем, пока Silverlight поддерживает объекты, которые вы используете.