Как написать библиотеку классов, которая будет работать с .NET 3.5 compact framework и регулярной структурой?

Как написать библиотеку классов .NET, которую я могу перекомпилировать как для обычной .NET 3.5 Framework, так и для .NET 3.5 Compact Framework?

Ответ 1

Эти два фреймворка не являются бинарными *, к сожалению, но не позволяйте этому останавливать вас.

Создайте два проекта в своем решении (один стандартный проект библиотеки классов и один проект библиотеки классов Compact Framework) и добавьте все файлы из одного проекта в другой в качестве ссылок, нажав "Добавить существующий файл", а затем проверив "Добавить как ссылку" в диалоговом окне файла.

Теперь у вас есть только один набор исходных кодов для поддержки, но ваше решение будет одновременно создавать обе библиотеки.

Если у вас есть какой-либо код внутри файла, специфичный для рамок рабочего стола, и он не будет работать на компактной основе, вы можете обернуть его в директиву компилятора (по крайней мере, на С#), например:

#if PocketPC
    // mobile-specific stuff here
#else
    // desktop-specific stuff here
#endif
  • Обратите внимание, что, хотя вы не можете использовать двоичные файлы для настольных систем на мобильной платформе, противоположное утверждение неверно. Компактные исполняемые файлы могут работать на рабочем столе. Однако я вполне уверен, что настольное приложение не может ссылаться на компактную сборку фреймов (хотя я никогда не пробовал).

Ответ 2

<Р → Эти две структуры не совместимы с бинарными >

На самом деле версия Desktop может загружать и запускать сборки CF.

Ответ 3

  • Создайте библиотеку классов для компактный каркас.
  • Добавить ссылку в эту библиотеку из вашего .exe проект (рабочий стол или мобильный)
  • Profit!
Серьезно, я не знаю, почему главный ответ настолько верный. Вам не нужны два отдельных проекта. Также я не влюблен в предпроцессорные директивы, они уродливы и требуют дополнительных знаний о проекте при игре с параметрами построения. Гораздо привлекательнее передавать все несовместимые биты и фрагменты на интерфейс (IPlaformServices или тому подобное), или вы даже можете просто спросить:
   if(Environment.OSVersion.Platform == PlatformID.WinCE)
   {
       // winCE specific     
   }
   else
   {
       // desktop specific
   }

Оба из них - лучшие решения, чем препроцессорные директивы IMO.