Мы занимаемся разработкой .NET Full и CF. Мы делаем более или менее то, что вы делаете, с небольшим изменением. Обычно проекту требуется два решения: одно для настольного приложения (Full .NET) и одно для мобильного приложения (CF .NET).
Иногда нам нужно разделить код между двумя приложениями. Мы создаем отдельную библиотеку классов для этого кода и библиотеку второго класса, которая заканчивается на «Compact» и содержит «связанные» файлы из полной библиотеки классов .NET. Например:
My.Desktop
My.Mobile
My.Common
My.Common.Compact
My.Common.dll ссылается на My.Desktop, а My.Common.Compact.dll - на My.Mobile.
Еще один совет. Иногда код в My.Common не работает точно так же, как в My.Common.Compact, потому что в CF отсутствует много кода, который существует в Full .NET. Чтобы преодолеть это, мы используем операторы #if с директивой FULL_FRAMEWORK, которая определена только в My.Common, и мы уверены, что она не определена в My.Common.Compact.