Как написать библиотеку классов, которая будет работать на компактной платформе .NET 3.5 И обычной платформе? - PullRequest
10 голосов
/ 10 октября 2009

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

Ответы [ 3 ]

14 голосов
/ 10 октября 2009

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

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

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

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

#if PocketPC
    // mobile-specific stuff here
#else
    // desktop-specific stuff here
#endif
  • Обратите внимание, что хотя вы не можете использовать двоичные файлы для настольных систем на мобильной платформе, обратное неверно. Компактные исполняемые файлы каркаса могут запускаться на рабочем столе. Однако я вполне уверен, что настольное приложение не может ссылаться на компактную сборку фреймворка (хотя я никогда не пробовал).
5 голосов
/ 11 октября 2009
  1. Создание библиотеки классов для компактной среды.
  2. Добавить ссылку на эту библиотеку из вашего проекта .exe (для настольных ПК или мобильных устройств)
  3. Прибыль!

Серьезно, я не знаю, почему верхний ответэто так топ.Вам не нужно два отдельных проекта вообще.Также я не влюблен в директивы препроцессора, они уродливы и требуют дополнительных знаний о проекте при игре с параметрами сборки.Гораздо приятнее передать все несовместимые фрагменты в интерфейс (IPlaformServices или тому подобное) или даже просто спросить:

   if(Environment.OSVersion.Platform == PlatformID.WinCE)
   {
       // winCE specific     
   }
   else
   {
       // desktop specific
   }

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

5 голосов
/ 10 октября 2009

> Эти две структуры не являются бинарно-совместимыми >

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

...