То, что я обычно делал и работал достаточно хорошо, - это наличие контрактов с данными в одном из проектов (например, в веб-проекте), а в проектах SL я добавляю их как links (right-нажмите на проект, добавьте существующий элемент, выберите файлы, затем вместо нажатия кнопки «Добавить» выберите выпадающий список и выберите «Добавить как ссылку»).Таким образом, типы разделяются между обоими проектами.
Обратите внимание, что это даже возможно сделать для сервисных контрактов, но поскольку SL не поддерживает синхронные вызовы операций, я обычно использую некоторые директивы компилятора, чтобы иметь возможность совместно использоватьдоговор на обслуживание, как в примере ниже.
[ServiceContract]
public interface ITest
{
#if SILVERLIGHT
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginAdd(int x, int y, AsyncCallback callback, object state);
int EndAdd(IAsyncResult asyncResult);
#else
int Add(int x, int y);
#endif
}