Различия между платформами .NET Compact Framework и .NET Framework
Обновлен: Ноябрь 2007
Платформа .NET Compact Framework является подмножеством платформы .NET Framework. В ней реализуется приблизительно 30 процентов полной библиотеки классов .NET Framework; она также содержит функции и классы, необходимые для разработки приложений для мобильных и встраиваемых устройств.
В этом разделе не описываются все различия между двумя платформами, а перечисляются наиболее важные вопросы разработки приложений.
Домены приложений
Платформа .NET Compact Framework в настоящее время не поддерживает загрузку сборок в доменно-нейтральную область кода для использования несколькими доменами приложения. Дополнительные сведения см. в разделе Домены приложений в .NET Compact Framework.
Массивы
Хотя некоторые языки поддерживают нижние границы, отличные от нуля, среда CLR такие границы не поддерживает, и инициирует исключение MissingMethodException, если первая граница не равна нулю.
ASP.NET
Платформа .NET Compact Framework в основном предназначена для реализации клиентских приложений с расширенными возможностями и не поддерживает ASP.NET. Для разработки веб-страниц для мобильных устройств можно использовать веб-элементы управления ASP.NET для мобильных устройств. Сведения о разработке веб-страниц для персональных компьютеров или поставщиков веб-служб см. в документации ASP.NET.
Сборки и форматы файлов
Приложения для обеих платформ используют сборки. Обе платформы обращаются к переносимым исполняемым файлам (PE), содержащим код MSIL и метаданные, которые определяют приложение .NET Framework. PE-файл может ссылаться на программное пространство имен, определяемое и совместно используемое другими сборками. Дополнительные сведения см. в разделе Двоичная совместимость с полной платформой .NET Framework.
Сборки и глобальный кэш сборок
Платформа .NET Compact Framework в настоящее время не поддерживает многомодульные сборки, но при этом поддерживает вспомогательные сборки.
Классы и типы
Платформа .NET Compact Framework поддерживает подмножество библиотеки классов .NET Framework. Это подмножество подходит для приложений, работающих на устройствах с ограниченными ресурсами, и семантически совместимо с аналогичными классами .NET Framework.
Сведения о том, как определить поддержку .NET Compact Framework, см. в разделе Практическое руководство. Поиск поддерживаемых элементов .NET Compact Framework в библиотеке классов.
COM-взаимодействие
Сведения о COM-взаимодействии и о различиях маршалинга данных в платформе .NET Compact Framework и в полной платформе .NET Framework см. в разделе Взаимодействие в платформе .NET Compact Framework.
Среда CLR
В среде CLR обеих платформ обеспечиваются преимущества выполнения управляемого кода, JIT-компиляции кода и сборки мусора. Они поддерживают спецификацию CLS.
Обе платформы имеют встроенные примитивные типы, а также другие типы, которые можно использовать и на основе которых можно создавать производные типы при построении приложения.
Среда CLR для .NET Compact Framework имеет размер, составляющий приблизительно 12 процентов от размера среды CLR для полной платформы .NET Framework.
Элементы управления
Платформа .NET Compact Framework поддерживает большую часть элементов управления Windows Forms, предоставляемых полной платформой .NET Framework, а также содержит элементы управления, присущие исключительно .NET Compact Framework.
Элементы управления Windows Forms для .NET Compact Framework создаются специально. Дополнительные сведения см. в разделе Элементы управления в платформе .NET Compact Framework.
Текущий каталог
Функциональные возможности текущего каталога отсутствуют в операционной системе Windows Embedded CE. Поэтому платформа .NET Compact Framework не поддерживает методы GetCurrentDirectory и SetCurrentDirectory.
Платформа .NET Compact Framework поддерживает свойство WorkingDirectory объекта ProcessStartInfo. Однако его контекст не сохраняется исполняемым приложением при последующих запусках и загрузках файлов.
Данные
Платформа .NET Compact Framework предоставляет реализацию подмножества ADO.NET и включает поставщик данных SQL Server Mobile. Пространство имен System.Data.OleDb не поддерживается. Дополнительные сведения о поддержке данных см. в разделе Поддержка доступа к данным и XML в .NET Compact Framework.
Типы данных и точность типов данных с плавающей запятой
Платформа .NET Compact Framework не поддерживает перечисление MidpointRounding.
Если делитель при делении очень большой или имеет максимальное значение, которое может иметь число с плавающей запятой, или же очень мал или имеет минимальное значение, которое может иметь число с плавающей запятой, вычисление вместо правильного результата возвращает ноль (0).
Платформа MIPS не поддерживает полную точность, задаваемую стандартом организации IEEE для двоичной арифметики с плавающей запятой (IEEE 754), и может вызывать непредвиденные результаты. Из соображений производительности платформа .NET Compact Framework не предоставляет для этой платформы возможности эмуляции операций с плавающей запятой.
Делегаты
Асинхронные делегаты, то есть методы BeginInvoke и EndInvoke, не поддерживаются. Дополнительные сведения см. в разделе Асинхронное программирование с использованием делегатов.
Развертывание приложений
Для развертывания приложения можно легко скопировать сборку на целевое устройство при помощи кабеля с настольного компьютера, его инфракрасного порта или беспроводного соединения с Интернетом или интрасетью. В Microsoft Visual Studio 2005 можно выполнять непосредственное развертывание на устройстве во время отладки.
Диагностическая трассировка
Платформа .NET Compact Framework не поддерживает файлы конфигурации для трассировки, но на ней можно использовать счетчики производительности. Дополнительные сведения см. в разделе Производительность и диагностика в .NET Compact Framework.
Освобожденные объекты
Полная платформа .NET Framework не гарантирует успешный доступ к свойствам или методам освобожденного объекта. Тем не менее, обращение к некоторым свойствам, таким как Text, в .NET Framework часто бывает успешным. Из-за различий в реализации двух платформ обращение к методам или свойствам освобожденного объекта в .NET Compact Framework почти всегда заканчивается неудачей.
Шифрование и локализация
Поддержка локализации (глобализации), например, форматирование дат и сортировка таблиц в соответствии с языковым стандартом, по мере возможности переносится на базовую операционную систему для обеспечения совместимости и эффективного расходования памяти.
Сортировка данных в платформе .NET Compact Framework зависит от операционной системы. Поэтому для некоторых языков и региональных параметров сортировка может давать непредвиденные результаты.
Платформа .NET Compact Framework не поддерживает поточные параметры CurrentUICulture.
Дополнительные сведения о поддержке локализации см. в разделе Кодировка и локализация в платформе .NET Compact Framework.
События
Платформа .NET Compact Framework поддерживает события GotFocus и LostFocus, но не поддерживает события Activated и Deactivated.
Строки описания исключений
Для экономии памяти .NET Compact Framework хранит строки сообщений об ошибках исключений в отдельной библиотеке DLL, называемой System.SR.dll.
Можно также предоставлять строки исключений для других языков и региональных параметров при локализации приложений.
Имена файлов и пути к файлам
Windows Embedded CE разрешает имя файла, указываемое без сведений о пути, как имя файла, находящегося в корневом каталоге устройства, а не в каталоге приложения. Для успешного выполнения операций указывайте сведения абсолютного пути.
Платформа .NET Compact Framework обрабатывает строки URI с префиксом "file://" не так, как это делает .NET Framework. Относительная спецификация наподобие "file://myfile" разрешается как "\\myfile". URI-строка "файл:///myfile" (с тремя косыми чертами) разрешается в "\myfile" в корневом каталоге.
Версию сборки можно узнать при помощи свойства Version, но его поддержка зависит от производителя устройства и не может быть гарантирована.
Чтобы получить имя каталога, содержащего приложение, см. раздел Практическое руководство. Возвращение каталога приложения.
Высокое разрешение
В .NET Compact Framework 2.0 и в более поздних версиях в проектах Visual Studio DPI-разрешение обрабатывается автоматически. Дополнительные сведения о высоком разрешении см. в разделе Практическое руководство. Поддержка изменений ориентации и разрешения экрана.
Ввод-вывод
Из-за различий в операционных системах устройств имеются ограничения на модель ввода-вывода. Платформа .NET Compact Framework не предоставляет уведомлений об изменениях файлов.
Поскольку операции ввода-вывода устройства производятся в оперативной памяти, атрибуты файлов и каталогов нельзя задавать или считывать.
Установка и CAB-файлы
Можно использовать CAB-файлы и создавать приложения установщика Microsoft Windows для распространения приложений.
Языки
Платформа .NET Compact Framework поддерживает разработку с использованием Visual Basic и Visual C#, но язык C++ в настоящее время не поддерживается.
Математические методы
Не все математические методы поддерживаются на всех платформах устройств; однако они включены в интерфейс API для совместимости.
Память
Платформа .NET Compact Framework оптимизирована для систем, работающих от батарей, и избегает интенсивного использования циклов оперативной памяти и процессора. Дополнительные сведения о том, как сэкономить память, см. в разделах Управление памятью устройства в платформе .NET Compact Framework и Практическое руководство. Улучшение производительности.
Сетевое взаимодействие
Платформа .NET Compact Framework предоставляет классы Infrared Data Association (IrDA) для выполнения соединений с помощью инфракрасных устройств, а также классы веб-прослушивания для обслуживания HTTP-запросов к устройству. Эти классы доступны только в .NET Compact Framework. Дополнительные сведения см. в разделе Поддержка сетей и подключений в .NET Compact Framework.
Код прокси
Платформа .NET Compact Framework не поддерживает весь код, создаваемый программой Web Services Description Language Tool (Wsdl.exe). Сведения о том, какой именно код не поддерживается, см. в разделе Практическое руководство. Использование прокси, созданного с помощью Wsdl.exe.
Отражение
Платформа .NET Compact Framework не поддерживает пространство имен System.Reflection.Emit.
Платформа .NET Compact Framework в настоящее время не поддерживает оператор равенства (==) при сравнении объектов отражения, таких как MethodInfo, FieldInfo, PropertyInfo, EventInfo, MemberInfo, MethodBase, ConstructorInfo и ParameterInfo. Дополнительные сведения об альтернативных возможностях см. в разделе Реализация метода Equals.
Удаленное взаимодействие
Платформа .NET Compact Framework не поддерживает удаленное взаимодействие. См. раздел Очередь сообщений в платформе .NET Compact Framework, в котором описываются альтернативные решения.
Безопасность
Различия в обеспечении безопасности и вопросы безопасности описаны в разделе Система безопасности в платформе .NET Compact Framework.
Сериализация
Из соображений производительности и экономии памяти платформа .NET Compact Framework не поддерживает двоичную сериализацию с использованием класса BinaryFormatter и сериализацию SOAP с использованием класса SoapFormatter.
Однако .NET Compact Framework предоставляет поддержку сериализации для передачи объектных данных при помощи протокола SOAP в веб-службах XML и сериализации наборов данных в формате XML.
Размер
Размер .NET Compact Framework составляет 8 процентов от размера распространяемого пакета .NET Framework. Размер платформы на диске на 50 процентов меньше из-за использования сжатия в файловой системе Windows Embedded CE.
Сокеты
Поддерживаются не все параметры сокетов. Дополнительные сведения см. в разделе Программирование сокета.
Обработка строк и регулярные выражения
Приложения, которые используют регулярные выражения в .NET Compact Framework, не совместимы на уровне машинных кодов с приложениями, которые используют регулярные выражения в полной платформе .NET Framework, но они совместимы по исходному коду.
Потоки
Приложение .NET Compact Framework может создавать до четырех потоков:
Основной поток приложения.
Поток, который используется для контроля таймеров различных периодов и тайм-аутов, которые могут быть запланированы системой или приложениями.
Поток, который используется для отслеживания изменений в активных интерфейсах TCP/IP (моделируя поведение обнаружения среды передачи, присутствующее в Windows XP, но не в Windows Embedded CE).
Поток, который используется для запуска методов завершения объектов. Этот поток создается, когда во время сборки мусора уничтожается первый объект, готовый к завершению.
Дополнительные сведения о поддержке потоков см. в разделе Работа с потоками в платформе .NET Compact Framework.
Интервалы времени
Свойство Now возвращает значение, выражаемое только в секундах, а не в миллисекундах. Более точные измерения можно получать при помощи свойства TickCount.
Таймеры
Методы Start и Stop объекта System.Timers.Timer не поддерживаются, но можно начать и остановить отсчет времени, задав для свойства Enabled объекта System.Windows.Forms.Timer значение true или false.
Переменная My в Visual Basic
Платформа .NET Compact Framework поддерживает пространство имен Visual Basic My (см. раздел Разработка с использованием My) за исключением следующих объектов My:
My.Application
My.Computer
My.User
My.Settings
Веб-службы
Клиент веб-служб использует сборки, создаваемые программой wsdl.exe, напрямую.
Не используйте локальный узел для создания веб-службы на устройстве, поскольку локальный узел ссылается на устройство, на котором выполняется приложение. Вместо этого нужно использовать либо имя машины, либо ее IP-адрес.
XML
Из соображений экономии памяти платформа .NET Compact Framework не поддерживает проверку XML-схемы. Поддерживается модель DOM XML. Дополнительные сведения см. в разделе Поддержка доступа к данным и XML в .NET Compact Framework.