.NET Compact Framework 与 .NET Framework 之间的差异 - TOMMYHU - 专注互联网开发及运营技术,提供相关资料及软件下载,奇趣网络时事评论!
Sep 25

.NET Compact Framework 与 .NET Framework 之间的差异 不指定

tommyhu , 21:06 , ASP.NET , Comments(0) , Trackbacks(0) , Reads(5590) , Via Original Large | Medium | Small

.NET Compact Framework .NET Framework 全功能版的一个子集。它实现了 .NET Framework 全功能版中约 30% 的类库,还包含特定于移动开发和嵌入式开发的功能和类。

本主题并未详尽两个 Framework 之间的所有差异,而是列出了使用它们开发应用程序时的重要注意事项。

应用程序域

                                                   

.NET Compact Framework 目前并不支持将程序集加载到非特定于域的代码区域中以供多个应用程序域使用。有关更多信息,请参见 .NET Compact Framework 中的应用程序域

数组

    

尽管某些语言支持不为零的数组下界,但是公共语言运行时 (CLR) 并不提供这种支持,如果第一个元素不为零,它将引发 MissingMethodException

ASP.NET

    

.NET Compact Framework 主要是一个胖客户端平台,它并不提供 ASP.NET 支持。若要开发用于移动设备的网页,可以使用 ASP.NET 移动 Web 控件。若要开发用于个人计算机或 Web 服务提供程序的网页,请参见 ASP.NET 文档。

程序集和文件格式

    

两个 Framework 的应用程序都使用程序集。这两个 Framework 都访问可移植可执行 (PE) 文件,这类文件包含 Microsoft 中间语言 (MSIL) 和定义 .NET Framework 应用程序的元数据。PE 文件可以引用由其他程序集文件定义和共享的编程命名空间。有关更多信息,请参见 .NET Framework 全功能版的二进制兼容性

程序集和全局程序集缓存

    

.NET Compact Framework 目前不支持多模块程序集,但确实支持附属程序集。

类和类型

    

.NET Compact Framework 支持 .NET Framework 类库的子集。此子集适用于专门在资源受限制的设备上运行的应用程序,并且在语义上与 .NET Framework 中的同名类兼容。

有关如何确定 .NET Compact Framework 支持的信息,请参见如何:在类库中查找受支持的 .NET Compact Framework 成员

COM 互操作

    

有关 .NET Compact Framework .NET Framework 全功能版的 COM 互操作和封送处理之间的差异,请参见 .NET Compact Framework 中的互操作性

公共语言运行时

    

这两个 Framework 中的公共语言运行时都具有托管代码执行、实时 (JIT) 代码编译和垃圾回收的优点。它们支持公共语言规范 (CLS)

这两个 Framework 都有内置的基元类型,以及其他在生成应用程序时可以使用和派生新类型的类型。

.NET Compact Framework 的公共语言运行时大小约为 .NET Framework 全功能版公共语言运行时的 12%

控件

    

.NET Compact Framework 支持 .NET Framework 全功能版提供的大部分 Windows 窗体控件,并且包含特定于 .NET Compact Framework 的控件。

Windows 窗体控件是专门为 .NET Compact Framework 生成的。有关更多信息,请参见 .NET Compact Framework 中的控件

当前目录

    

Windows Embedded CE 操作系统中并不具有当前目录的功能。因此,.NET Compact Framework 不支持 GetCurrentDirectory SetCurrentDirectory 方法。

.NET Compact Framework 支持 ProcessStartInfo 对象的 WorkingDirectory 属性。但是,后续启动和文件加载时运行的可执行文件不保留该属性的上下文。

数据

    

.NET Compact Framework 提供 ADO.NET 的子集实现,并包括 SQL Server Mobile 数据提供程序。不支持 System.Data.OleDb 命名空间。有关数据支持的更多信息,请参见 .NET Compact Framework 中的数据访问和 XML 支持

数据类型和浮点精度

    

.NET Compact Framework 不支持 MidpointRounding 枚举。

在除法运算中,如果除数非常大或是最大浮点值,或者除数非常小或是最小浮点值,则运算将返回 0(零)而不是正确的计算结果。

MIPS 平台不支持二进制浮点算术标准 (IEEE 754) 指定的完全精度,可能会导致不可预知的结果。出于性能考虑,.NET Compact Framework 不为此平台提供浮点模拟功能。

委托

    

不支持异步委托,尤其是 BeginInvoke EndInvoke 方法。有关更多信息,请参见 使用委托进行异步编程

部署应用程序

    

要部署应用程序,只需通过以下方式之一轻松地将程序集复制到目标设备即可:使用台式计算机的电缆连接或红外端口连接;使用无线 Internet Intranet 连接。在 Microsoft Visual Studio 2005 中,可在调试时直接将应用程序部署到设备中。

诊断跟踪

    

.NET Compact Framework 不支持用于跟踪的配置文件,但您可以使用性能计数器。有关更多信息,请参见 .NET Compact Framework 的性能和诊断

已释放的对象

    

.NET Framework 全功能版不保证对已释放对象的属性或方法的访问总能成功。但是,在 .NET Framework 上通常确实能够成功访问 Text 等某些属性。由于这两个 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 处理带 file:// 前缀的统一资源标识符 (URI) 字符串的方式与 .NET Framework 全功能版不同。指定的相对路径(例如 file://myfile)将解析为 \\myfileURI 字符串 file:///myfile(带三个正斜杠)将解析为根目录中的 \myfile

可通过 Version 属性获取程序集的版本,但其支持依赖于设备制造商,并且无法保证。

若要获取包含应用程序的目录的名称,请参见如何:获取应用程序目录

高分辨率

    

.NET Compact Framework 2.0 和更高版本中,Visual Studio 项目中会自动处理 DPI 分辨率。有关高分辨率的更多信息,请参见如何:处理方向和分辨率更改

输入/输出 (I/O)

    

由于设备操作系统的差异,I/O 模型存在约束和限制。.NET Compact Framework 不提供文件更改通知。

由于设备 I/O RAM 中发生,因此无法设置或访问文件和目录属性。

安装和 CAB 文件

    

可以使用 CAB 文件并创建 Microsoft Windows Installer 应用程序来分发应用程序。

语言

    

精简版本支持使用 Visual Basic Visual C# 进行开发,但目前尚不支持 C++

Math

    

并不是所有的 Math 方法在所有设备平台上都可以得到支持,但为了兼容起见,这些方法都包括在 API 中。

内存

    

.NET Compact Framework 已经过优化,特别适合于用电池供电的系统,并且避免了高强度地使用 RAM CPU 周期。有关如何节省内存的更多信息,请参见 .NET Compact Framework 中的设备内存管理如何:提高性能

网络

    

.NET Compact Framework 提供了用于建立红外连接的红外数据协会”(IrDA) 类,以及用于为设备的 HTTP 请求提供服务的 Web 侦听类。仅在 .NET Compact Framework 中提供这些类。有关更多信息,请参见 .NET Compact Framework 中的网络和连接

代理代码

    

.NET Compact Framework 不支持 Web 服务描述语言工具 (Wsdl.exe) 生成的所有代码。若要确定哪些代码不受支持,请参见如何:使用 Wsdl.exe 生成的代理

反射

    

.NET Compact Framework 不支持 System.Reflection.Emit 命名空间。

目前,在比较 MethodInfoFieldInfoPropertyInfoEventInfoMemberInfoMethodBaseConstructorInfo ParameterInfo 等反射对象时,.NET Compact Framework 不支持相等运算符 (==)。作为替代方法,请参见实现 Equals 方法

远程处理

    

.NET Compact Framework 不支持远程处理。有关替代解决方案,请参见 .NET Compact Framework 中的消息队列

安全性

    

有关安全性差异和注意事项,请参见 .NET Compact Framework 中的安全

序列化

    

出于大小和性能方面的考虑,.NET Compact Framework 不支持使用 BinaryFormatter 的二进制序列化或使用 SoapFormatter SOAP 序列化。

但是,.NET Compact Framework 确实可在使用 SOAP XML Web services 中传输对象数据时提供序列化支持,并支持将数据集序列化为 XML

大小

    

.NET Compact Framework 的大小是 .NET Framework 全功能版可再发行包的 8%。经 Windows Embedded CE 文件系统压缩后,它在磁盘上的大小要小 50%

套接字

    

不是所有的套接字选项都受支持。有关更多信息,请参见套接字编程

字符串处理,正则表达式

    

使用 .NET Compact Framework 中的正则表达式的应用程序与使用 .NET Framework 全功能版中的正则表达式的应用程序的二进制代码不兼容,但它们的源代码兼容。

线程

    

一个 .NET Compact Framework 应用程序最多可创建四个线程:

主应用程序线程。

用来控制可由系统或应用程序安排的各种时间段计时器和超时的线程。

用来跟踪活动 TCP/IP 接口更改的线程(模拟 Windows XP 中提供而 Windows Embedded CE 中未提供的介质检测行为)。

用来运行对象终结器的线程。在对第一个可终结对象进行垃圾回收时,将创建此线程。

有关线程处理支持的更多信息,请参见 .NET Compact Framework 中的线程处理

时间间隔

    

Now 属性返回的值只特定于秒,而非毫秒。可以使用 TickCount 属性获得更精确的度量值。

计时器

    

不支持 System.Timers.Timer 对象的 Start Stop 方法,但通过将 System.Windows.Forms.Timer 对象的 Enabled 属性设置为 true false,可以启动和停止计时。

Visual Basic My

    

精简版支持 Visual BasicMy 功能(请参见使用 My 开发),但下列 My 对象除外:

My.Application

My.Computer

My.User

My.Settings

Web 服务

    

Web 服务客户端直接运行 wsdl.exe 生成的程序集。

请不要使用 localhost 在设备上创建 Web 服务,因为 localhost 即为运行应用程序的设备。应使用计算机名称或其 IP 地址。

XML

    

出于大小方面的考虑,.NET Compact Framework 不支持 XML 架构验证。它确实支持 XML 文档对象模型 (DOM)。有关更多信息,请参见 .NET Compact Framework 中的数据访问和 XML 支持

NET Compact Framework 开发中与台式机的不同之处

开始着手开发设备项目之前,应了解使用 .NET Framework 的桌面应用程序开发和使用 .NET Compact Framework 的设备应用程序开发之间的区别。

LINQ

    

.NET Compact Framework 3.5 版中的语言集成查询 (LINQ) 包括一部分桌面 LINQ 功能。有关更多信息,请参见.NET Compact Framework 中的 LINQ

Visual Basic 中的编程元素

    

在使用 Visual Basic 针对 .NET Compact Framework 进行编程时,可使用的一系列编程元素(例如函数和关键字)与针对完整 .NET Framework 进行编程时并不相同。用于设备应用程序开发的 Visual Basic 语言参考 中总结了这些不同之处,Visual Basic 参考 中单独讨论这些元素的主题也对此进行了说明。

使用 My 进行开发

    

Visual Studio 包含对 My.ResourcesMy.Forms My.WebServices 的支持。它不包含对 My.ApplicationMy.ComputerMy.User My.Settings 的支持。有关更多信息,请参见 My Reference

文件输入和输出

    

Visual Basic 提供两个针对文件输入/输出 (I/O) 的选项:

标准 .NET FrameworkSystem.IO 命名空间。公共语言运行库 (CLR) 中的所有语言都支持这些库。

一组特定于 Visual Basic 的库,它们提供了与早期版本的 Visual Basic 库相似的开发体验。

设备项目仅支持 .NET FrameworkSystem.IO 命名空间。不支持使用 FileSystem 命名空间的文件 I/O,因为:

设备上不存在 FileSystem 命名空间的几项常用功能。例如,设备上不存在当前目录或当前驱动器的概念。因此,无法使用 ChDir ChDrive 功能。

仅支持 .NET FrameworkSystem.IO 命名空间减少了 Visual Basic 帮助器库的大小。这样可以释放设备上宝贵的空间。

隐式后期绑定

    

Visual Basic 中,如果某个对象被分配给声明为 Object 数据类型 类型的变量,则该对象就是后期绑定的。该类型的对象在运行时绑定。可以给对象赋值,并从中检索值。但却不能使用圆点约定指定对象变量的方法或属性。下面的代码将造成编辑器错误,因为它试图获取对象的属性:

dim a as object = "automobile"

dim i as integer = a.horsepower

COM 互操作

    

桌面开发人员在按自己的步调过渡到 .NET Framework 时,他们使用 COM 互操作性来利用现有的 COM 对象。设备项目仅支持某些 COM 互操作性方案。有关更多信息,请参见 设备的 COM 互操作性

调试

    

附加到正在运行的进程的方法与桌面应用程序有所不同。有关更多信息,请参见 如何:附加到托管设备进程

请参见

    

概念

设备项目的 .NET Compact Framework 引用

早期绑定和后期绑定

Visual Basic 中的 MeMyMyBase MyClass

设备的 COM ���操作性

参考

用于设备应用程序开发的 Visual Basic 语言参考

System.IO

确定要使用的技术和工具

My Reference

NET Compact Framework 版本的变体

在开发智能设备应用程序时,务必要考虑到安装的 .NET Compact Framework 版本的各种可能的变体。有关更多信息,请参见.NET Compact Framework 中的新增功能

.NET Compact Framework 1.0

    

Compact Framework 的最初版本。

.NET Compact Framework 1.0 SP1

    

1.0 版的 bug 修复程序。

支持 Smartphone

.NET Compact Framework 1.0 SP2

    

1.0 SP1 bug 修复程序。

性能得到了改进。

支持使用横向显示模式的设备。

支持自动滚动,自动支持横向模式的对话框。

.NET Compact Framework 1.0 SP3

    

1.0 SP2 bug 修复程序。

.NET Compact Framework 2.0

    

已升级为 .NET Compact Framework 2.0 版的智能设备将具备以下特性:

性能得到了改进。

支持泛型类。

支持 COM 互操作。

改进了对控件的支持。

支持移动设备的 Direct3D DirectDraw

.NET Compact Framework 2.0 SP1

    

支持受到远程管理的设备。

支持远程性能监视器。

命令行调试器。

.NET Compact Framework 2.0 SP2

    

堆转储实用工具。

.NET Compact Framework 3.5

    

支持 Windows Communication Foundation (WCF)

支持 语言集成查询 (LINQ)

                                                                
            

       说明:

            
            

支持 LINQ to XML LINQ to DataSet。不支持 LINQ to SQL

            

支持新的运行库工具。

改进了对控件的支持。

支持 SoundPlayer

支持压缩。

调试和日志功能增强。

改进的错误处理。

请参见

    

概念

设备项目的 .NET Compact Framework 引用

其他资源

使用 .NET Compact Framework 进行设备编程

如何:处理方向和分辨率更改

下表显示 .NET Compact Framework 所支持的 Pocket PC Smartphone 屏幕方向。维数以像素为单位(宽×高)。

                                                                                                                                                                                                                        
            

屏幕方向

            
            

96 DPI 典型维数

            
            

192 DPI(高分辨率)典型维数

            
            

纵向 - Pocket PC

            

纵向 - Smartphone

            
            

240   x 320

            

176   x 220 240 x 320

            
            

480   x 640

            

352   x 440 480 x 640

            
            

横向 - 仅限 Pocket PC

            
            

320   x 240

            
            

640   x 480

            
            

方形 - 仅限 Pocket PC

            
            

240   x 240

            
            

480   x 480

            

您可以使用锚定和停靠来自动调整控件大小,以便窗体内容适应不同的屏幕方向。锚定可保持与某条边的指定距离,停靠则可对齐父容器的一条边。

控件的 Anchor 属性用于确定在调整包含该控件的控件或窗体的大小时该控件的调整行为。控件的 Dock 属性用于指定包含该控件的控件要停靠哪些边。

.NET Compact Framework 中,锚定和停靠的行为与 .NET Framework 全功能版中的行为相同。

您可以自定义应用程序,使之适应不同的 DPI(每英寸点数)像素分辨率设置。

处理屏幕方向更改

您可以将本应位于窗体特定区域中的控件放置在某个容器控件(如 Panel)内,然后将 Panel Dock 属性设置为所需要的边。

若要保持控件相对于其窗体边界的适当大小和位置,请将控件的 Anchor 属性设置为所需的位置。

例如,若要在右下角始终显示一个按钮并保持其大小不变,请使用下面的语句:

VB

C++

F#

JScript

复制

不支持该语言或没有可用的代码示例。

VB

C++

F#

JScript

复制

this.button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

Microsoft Visual Studio 2005 中,您可以在属性窗格上进行锚定和停靠设置。

更改屏幕方向

如果 Pocket PC 运行的是 Windows Mobile 5.0 版,则可以按照 ScreenOrientation 枚举的指定将屏幕方向从纵向零度更改为 90180 270 度。例如,下面的语句将设置一个横向方向:

VB

C++

F#

JScript

复制

不支持该语言或没有可用的代码示例。

VB

C++

F#

JScript

复制

SystemSettings.ScreenOrientation = ScreenOrientation.Angle270;

请注意,屏幕方向不仅更改应用程序,而且还更改设备。因此,好的做法是将屏幕方向还原为其在 FormClosing 事件的事件处理代码中的原始设置。

处理屏幕分辨率更改

Microsoft Visual Studio 2005 中创建智能设备项目时,设计器将提供代码以根据设备的屏幕分辨率适当地自动缩放控件;否则,如果应用程序在一台 DPI(每英寸点数)分辨率与用于开发它的设备不同的设备上运行,窗体显示将会过大或过小。因此,窗体内的控件必须进行适当缩放。

如果在 Visual Studio 2005 中创建智能设备项目,设计器将在 InitializeComponent 方法中添加下面的语句:

[Visual Basic]

复制

Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!)

Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi

[C#]

复制

this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;

这些语句显示了一个正在开发的应用程序,该应用程序用于分辨率为 96 DPI 的设备,通过 DPI 模式对该应用程序执行自动缩放。请注意,96 DPI 是从运行 Visual Studio 2005 的桌面计算机所获得的默认值。设计器可自动生成此代码,且窗体内的控件将自动缩放以处理不同的 DPI 设置。

如果应用程序包含用 OnPaint 方法绘制的图形,图形将不会自动缩放。您需要使用 Graphics 对象的 DpiX DpiY 属性来确定适当的缩放。使用 LogFont 显示旋转文本的示例 显示了一个手动缩放示例。

请参见

    

任务

如何:使控件与窗体边缘对齐

概念

Windows 窗体中的自动缩放

其他资源

.NET Compact Framework 中的 Windows 窗体控件


▲返回顶部
Last modified by tommyhu on2012/10/07 07:47

Add a comment

Nickname

emotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemot