Diferencias entre .NET Compact Framework y .NET Framework

Actualización: noviembre 2007

.NET Compact Framework es un subconjunto del entorno completo de .NET Framework. Implementa un 30 por ciento aproximadamente de la biblioteca de clases completa del entorno íntegro de .NET Framework y contiene además las características y clases específicas del desarrollo móvil e incrustado.

En este tema no se describen todas las diferencias que existen entre los dos marcos de trabajo, sino que se indican consideraciones importantes que hay que tener en cuenta para el desarrollo de aplicaciones.

Dominios de aplicación

Por el momento, .NET Compact Framework no admite la carga de ensamblados en un área de código neutral con respecto al dominio para su uso en distintos dominios de aplicación. Para obtener más información, vea Dominios de aplicación de .NET Compact Framework.

Matrices

Aunque algunos lenguajes admiten límites inferiores distintos de cero, Common Language Runtime (CLR) no los acepta y produce una excepción MissingMethodException si el primer elemento es distinto de cero.

ASP.NET

.NET Compact Framework es fundamentalmente una plataforma de cliente enriquecida y no es compatible con ASP.NET. Si desea desarrollar páginas web para dispositivos móviles, puede usar controles web móviles de ASP.NET. Si desea desarrollar páginas web para equipos personales o proveedores de servicios web, consulte la documentación de ASP.NET.

Ensamblados y formatos de archivo

Las aplicaciones de los dos entornos Framework utilizan ensamblados. Ambos obtienen acceso a archivos ejecutables (PE), que contienen el Lenguaje intermedio de Microsoft (MSIL) y los metadatos que definen una aplicación de .NET Framework. Un archivo PE puede hacer referencia a un espacio de nombres de programación definido y compartido por otros archivos de ensamblado. Para obtener más información, consulte Compatibilidades binarias con la versión completa de .NET Framework.

Ensamblados y caché de ensamblados global

De momento, .NET Compact Framework no admite ensamblados de varios módulos, pero sí que admite ensamblados satélite.

Clases y tipos

.NET Compact Framework admite un subconjunto de la biblioteca de clases de .NET Framework. Dicho subconjunto es apropiado para las aplicaciones diseñadas para ejecutarse en dispositivos con limitaciones de recursos y es semánticamente compatible con las clases del mismo nombre de .NET Framework.

Para obtener información acerca de cómo determinar la compatibilidad con .NET Compact Framework, vea Cómo: Buscar miembros compatibles de .NET Compact Framework en la biblioteca de clases.

Interoperabilidad COM

Para obtener información sobre la interoperabilidad COM y las diferencias en el cálculo de referencias entre .NET Compact Framework y la versión completa de .NET Framework, vea Interoperabilidad en .NET Compact Framework.

Common Language Runtime

Los Common Language Runtime de los dos entornos de Framework se benefician de la ejecución de código administrado, la compilación de código Just-In-Time (JIT) y la recolección de elementos no utilizados. Los dos son compatibles con la CLS (Common Language Specification).

Los dos marcos de trabajo tienen tipos primitivos integrados, así como otros tipos que pueden utilizarse y derivarse cuando se genera una aplicación.

El Common Language Runtime de .NET Compact Framework ocupa aproximadamente un 12% del tamaño del Common Language Runtime de la versión completa de .NET Framework.

Controles

.NET Compact Framework admite la mayor parte de los controles de formularios Windows Forms que se incluyen la versión completa de .NET Framework y contiene controles que son específicos de .NET Compact Framework.

Los controles de formularios Windows Forms están específicamente diseñados para .NET Compact Framework. Para obtener más información, vea Controles de .NET Compact Framework.

Directorio actual

La funcionalidad de un directorio actual no está presente en el sistema operativo Windows Embedded CE. Por lo tanto, .NET Compact Framework no admite los métodos GetCurrentDirectory y SetCurrentDirectory.

.NET Compact Framework admite la propiedad WorkingDirectory de un objeto ProcessStartInfo. El ejecutable en ejecución no conserva, sin embargo, su contexto en los inicios y cargas de archivo subsiguientes.

Datos

.NET Compact Framework proporciona una implementación del subconjunto de ADO.NET e incluye el proveedor de datos de SQL Server Mobile. No se admite el espacio de nombres System.Data.OleDb. Para obtener más información sobre los proveedores de datos, vea Acceso a datos y compatibilidad XML en .NET Compact Framework.

Tipos de datos y precisión de punto flotante

.NET Compact Framework no admite la enumeración MidpointRounding.

En el cálculo de una división, si el divisor es muy grande o tiene el valor de punto flotante máximo, o si, por el contrario, es un valor muy bajo o tiene el valor de punto flotante mínimo, el cálculo devuelve 0 (cero) en lugar del resultado correcto.

La plataforma MIPS no acepta la precisión completa especificada por el estándar IEEE 754 para aritmética binaria de punto flotante (Standard for Binary Floating-Point Arithmetic), y puede causar resultados imprevistos. Por consideraciones de rendimiento, .NET Compact Framework no proporciona capacidad de emulación de punto flotante para esta plataforma.

Delegados

No se admiten delegados asincrónicos, concretamente los métodos BeginInvoke y EndInvoke. Para obtener más información, vea Programación asincrónica mediante delegados.

Implementar aplicaciones

Para implementar una aplicación, basta con copiar el ensamblado en el dispositivo de destino mediante un cable que conecte el equipo de escritorio, un puerto de infrarrojos o una conexión de Internet o intranet inalámbrica. En Microsoft Visual Studio 2005, la implementación puede realizarse directamente en el dispositivo mientras se realiza la depuración.

Seguimiento del diagnóstico

.NET Compact Framework no permite el uso de archivos de configuración para seguir la traza, pero pueden utilizarse contadores de rendimiento. Para obtener más información, vea Rendimiento y diagnósticos de .NET Compact Framework.

Objects desechados

El entorno completo de .NET Framework no garantiza que el acceso a propiedades o métodos en un objeto desechado se realice siempre correctamente. Sin embargo, el acceso a algunas propiedades, como Text, suele realizarse correctamente en .NET Framework. Debido a las diferencias de implementación entre los dos marcos de trabajo, el acceso a los métodos o propiedades en un objeto desechado casi nunca se producirá correctamente en .NET Compact Framework.

Codificación y localización

La compatibilidad con la localización (globalización), como los formatos de fecha y las tablas de clasificación apropiadas para la configuración regional, remite al sistema operativo subyacente siempre que sea posible por motivos de compatibilidad y eficiencia del tamaño.

.NET Compact Framework depende del sistema operativo para ordenar los datos. Por tanto, los resultados de ordenación pueden ser inesperados para algunas referencias culturales.

.NET Compact Framework no admite la configuración de CurrentUICulture por subproceso.

Para obtener más información sobre la compatibilidad de localización, vea Codificación y localización en .NET Compact Framework.

Eventos

.NET Compact Framework admite los eventos GotFocus y LostFocus, pero no es compatible con los eventos Activated y Deactivated.

Cadenas de descripción de excepciones

.NET Compact Framework proporciona las cadenas de mensajes de error de las excepciones en un archivo DLL independiente, denominado System.SR.dll, con el fin de ahorrar memoria.

También se pueden proporcionar cadenas de excepciones para otras referencias culturales, si se desea localizar las aplicaciones.

Nombres de archivo y rutas de acceso

Windows Embedded CE resuelve los nombres de archivo especificados sin la información de la ruta de acceso, como si estuvieran ubicados en el directorio raíz del dispositivo y no en el directorio de la aplicación. Para asegurarse de que las operaciones se realizan correctamente, especifique rutas de acceso absolutas.

.NET Compact Framework procesa las cadenas de identificador uniforme de recursos (URI) que llevan como prefijo file:// de forma distinta que el entorno completo de .NET Framework. Una especificación relativa, como file://myfile, se resuelve como \\myfile. La cadena de URI file:///myfile (con tres barras diagonales) se resuelve como \myfile en el directorio raíz.

Puede obtener la versión de un ensamblado con la propiedad Version, pero su compatibilidad depende del fabricante del dispositivo y, por lo tanto, no está garantizada.

Para obtener el nombre del directorio que contiene una aplicación, vea Cómo: Obtener el directorio de aplicaciones.

Alta resolución

En .NET Compact Framework 2.0 y versiones posteriores, la resolución de PPP se controla automáticamente en proyectos Visual Studio. Para obtener más información sobre alta resolución, vea Cómo: Controlar los cambios de orientación y de resolución.

Entrada/salida (E/S)

A causa de las diferencias entre los sistemas operativos, existen restricciones y limitaciones en el modelo de E/S. .NET Compact Framework no proporciona notificaciones de cambios en los archivos.

Dado que la E/S en los dispositivos ocurre en la RAM, no es posible definir ni obtener acceso a los atributos de archivos y directorios.

Instalación y archivos CAB

Puede usar archivos CAB y crear aplicaciones de Microsoft Windows Installer para distribuir sus aplicaciones.

Lenguajes

.NET Compact Framework admite el desarrollo en Visual Basic y Visual C# pero, de momento, no admite el desarrollo en C++.

Math

No todos los métodos matemáticos se admiten en todas las plataformas de dispositivos, pero se incluyen en la API por motivos de compatibilidad.

Memoria

.NET Compact Framework está optimizado para sistemas alimentados por baterías y evita el uso intensivo de ciclos de RAM y de CPU. Para obtener más información sobre el ahorro de memoria, vea Administración de memoria de dispositivos en .NET Compact Framework y Cómo: Mejorar el rendimiento.

Conexión de red

.NET Compact Framework proporciona clases de asociación de datos por infrarrojos (IrDA) para establecer conexiones por infrarrojos y clases de escucha web para atender solicitudes HTTP en el dispositivo. Estas clases sólo están disponibles en .NET Compact Framework. Para obtener más información, vea Funciones de redes y conexión en .NET Compact Framework.

Código proxy

.NET Compact Framework no admite todo el código generado por Herramienta Lenguaje de descripción de servicios Web (Wsdl.exe). Para determinar el código que no se admite, vea Cómo: Utilizar un servidor proxy generado por Wsdl.exe.

Reflexión

.NET Compact Framework no admite el espacio de nombres System.Reflection.Emit.

En estos momentos, .NET Compact Framework no admite el comparador de igualdad (==) cuando compara objetos de reflexión, como MethodInfo, FieldInfo, PropertyInfo, EventInfo, MemberInfo, MethodBase, ConstructorInfo y ParameterInfo. Como alternativa, vea Implementar el método Equals.

Comunicación remota

.NET Compact Framework no admite la comunicación remota. Vea Message Queue Server en .NET Compact Framework para buscar soluciones alternativas.

Seguridad

En Seguridad en .NET Compact Framework se describen las diferencias y consideraciones de seguridad.

Serialización

Por cuestiones de tamaño y rendimiento, .NET Compact Framework no admite la serialización binaria mediante BinaryFormatter o la serialización SOAP mediante SoapFormatter.

No obstante, .NET Compact Framework proporciona compatibilidad con la serialización para transmitir datos de objetos por medio de SOAP en los servicios web XML y la serialización de conjuntos de datos para XML.

Tamaño

.NET Compact Framework representa el 8 por ciento del tamaño del paquete redistribuible completo de .NET Framework. El tamaño en disco es un 50 por ciento más pequeño debido a la compresión del sistema de archivos de Windows Embedded CE.

Sockets

No se admiten todas las opciones de socket. Para obtener más información, vea Programación de sockets.

Manipulación de cadenas, expresiones regulares

Las aplicaciones que utilizan expresiones regulares en .NET Compact Framework no tienen compatibilidad binaria con las aplicaciones que usan expresiones regulares en el entorno completo de .NET Framework, si bien sus códigos fuente son compatibles.

Threads

Una aplicación .NET Compact Framework crea hasta cuatro subprocesos:

  • Un subproceso de aplicación principal.

  • Un subproceso que se utiliza para controlar varios temporizadores y tiempos de espera que pueden programar las aplicaciones o el sistema.

  • Un subproceso que se utiliza para realizar un seguimiento de los cambios en las interfaces TCP/IP activas (que simulan el comportamiento de detección de medios presente en Windows XP pero no en Windows Embedded CE).

  • Un subproceso que se utiliza para ejecutar los finalizadores de objetos. Este subproceso se crea cuando se recolectan los elementos no utilizados del primer objeto susceptible de finalización.

Para obtener más información sobre la compatibilidad de subprocesos, vea Subprocesamiento en .NET Compact Framework.

Intervalos de tiempo

La propiedad Now devuelve un valor con una precisión de segundos, no de milisegundos. Para obtener una medición más precisa, utilice la propiedad TickCount.

Temporizadores

No se admiten los métodos Start y Stop para un objeto System.Timers.Timer, pero puede iniciar y detener la temporización estableciendo la propiedad Enabled de un objeto System.Windows.Forms.Timer en true o false.

Visual Basic My

.NET Compact Framework admite la característica My de Visual Basic (vea Desarrollo con la función My), salvo para los siguientes objetos My:

  • My.Application

  • My.Computer

  • My.User

  • My.Settings

Servicios Web

El cliente de servicios web ejecuta directamente los ensamblados generados por wsdl.exe.

No utilice localhost para crear un servicio web en el dispositivo, ya que localhost hace referencia al dispositivo que ejecuta la aplicación. En su lugar, debe utilizar el nombre del equipo o su dirección IP.

XML

Debido a cuestiones de tamaño, .NET Compact Framework no admite la validación del esquema XML. No se acepta el DOM (Modelo de objetos de documento) de XML. Para obtener más información, vea Acceso a datos y compatibilidad XML en .NET Compact Framework.

Vea también

Otros recursos

Información general acerca de .NET Compact Framework